腾讯2019正式批春笔试题

A:题目描述:

  数字拆分:

   一个数字有两种拆法,1 对所有数字减一 2 把所有数字都拆分成两个更小的数之和,问之多拆分n次,把N完全消去需要多少轮操作。

输入取值范围: 1<= N <=100,  0<=K<=100

样例: 输入 5 2 ,输出 4。 输入15 4,输出 6

定义dp[i][j]为将i之多拆分j次所有的轮数,dp[i][j] = min(dp[i-1][j-1], dp[(i+1)/2][j-1]) + 1 , dp[i-1][j] 代表这次不拆分,减去1, dp[(i+1)/2][j-1] 代表这次进行拆分,拆分成两个中位数,那么较大的数的所需操作肯定大于较小的中位数的所需的操作。

public class MaIn {
    public static  void main(String[] args){
        Scanner in = new Scanner(System.in);
        String[] input = in.nextLine().split(" ");
        int n, m;
        n = Integer.parseInt(input[0]);
        m = Integer.parseInt(input[1]);
//        dp[1][0~100]=1;
        if(m==0){
            System.out.print(n);
            return;
        }
        int[][] dp = new int[105][105];
        for(int i=0;i<=100;i++){
            dp[i][0] = i;
        }
        for(int i=0;i<=100;i++){
            dp[1][i] = 1;
        }
        for(int i=1;i<=n;i++){
           for(int j=1;j<=m;j++){
                 dp[i][j]=Math.min(dp[i-1][j],dp[(i+1)/2][j-1])+1;
           }
        }
        System.out.print(dp[n][m]);
    }
}
View Code

B:题目描述: 有n个村庄,每个村庄有A[i]个水果,A[i] >0 代表 村庄需要购进水果, A[i] < 0 代表村庄需要卖出水果。 所有村庄供需平衡,即A[i]求和为0,把k个水果搬到相邻村庄需要k块钱的运费,

最少需要多少花费可以满足所有村庄对水果的需求。

输入取值范围: 2 <= n <= 300000, -1000 <= A[i] <= 1000

考虑n个村庄和为0,那么不管前缀和为正或者负,它肯定需要在后面被加起来,那么每次都加上前缀和的绝对值,就代表了它需要被转移的代价。

输入 5 -4 1 -3 1  答案就为 5 + 1 + 2 +1 + 0 = 9

C: 题目描述: 对与长度为n的数组,做如下k次操作,找出数组中最小的数x,输出,所有数字减去x,如果数组中的数字全是0,直接输出0

思路: 先排序,再减去x,每次都会消去一个数字,做k次即可。

转载于:https://www.cnblogs.com/xianbin7/p/10669510.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值