2019/09/01 腾讯笔试
3.搬运工 办公室 箱子

public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String[] nm = scanner.nextLine().trim().split(" ");
        int n = Integer.valueOf(nm[0]);
        int m = Integer.valueOf(nm[1]);
        int[] a = new int[n];
        int boxes = 0;
        String[] astrs = scanner.nextLine().trim().split(" ");
        for(int i=0;i<n;i++) {
            a[i] = Integer.valueOf(astrs[i]);
            boxes += a[i];
        }
        int cost = 0;
        int[] b = new int[n];
        while(boxes>0) {
            for(int i = a.length-1;i>=0;i--) {
                if(b[i]>a[i]&&i+1<a.length) {
                    b[i+1]+=b[i]-a[i];
                    b[i]=a[i];
                    boxes-=a[i];
                    a[i]=0;

                }
                else if(b[i]>a[i]) {
                    boxes-=a[i];
                    a[i]=0;
                }
                else {
                    a[i]-=b[i];
                    boxes-=b[i];
                }
                if(i==0&&m>0) {
                    b[i]+=m;
                    m=0;
                }
            }
            cost++;
        }
        System.out.println(cost);
    }

5.花匠小Q 红花 白花 白花连续摆放数量为k的倍数(倍数可以为0)

public static int[] getDp(int end,int k) {
        int[] dp = new int[end+1];
        dp[0]=1;
        for(int i=1;i<=end;i++) {
            if(i<k)dp[i]=1;
            else dp[i]=dp[i-1]+dp[i-k];
        }
        return dp;
    }
    public static int getNumOfZone(int from,int end,int[] dp) {
        int res = 0;
        for(int i=from;i<=end;i++)
            res+=dp[i];
        return res;
    }
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String[] nk = scanner.nextLine().trim().split(" ");
        int n = Integer.valueOf(nk[0]);
        int k = Integer.valueOf(nk[1]);
        int[][] groups = new int[n][2];
        int maxend = 0;
        for(int i=0;i<n;i++) {
            String[] astrs = scanner.nextLine().trim().split(" ");
            groups[i][0] = Integer.valueOf(astrs[0]);
            groups[i][1] = Integer.valueOf(astrs[1]);
            maxend = Math.max(maxend, groups[i][1]);
        }
        int[] dp = getDp(maxend,k);
        for(int i=0;i<n;i++) {
            System.out.println(getNumOfZone(groups[i][0],groups[i][1],dp));
        }
    }