放苹果, 华为


import java.util.*;
public class Main {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            int m = sc.nextInt(), n = sc.nextInt();
            if(m < 0 || m > 10 || n < 0 || n > 10) 
                System.out.println("-1");
            else {
                int[][] f = new int[m+1][n+1];
                f[0][0] = 1;
                for(int i=1; i <= m; i++) f[i][0] = 0; // 没有盘子
                for(int j=1; j <= n; j++) f[0][j] = 1; // 没有苹果
                for(int i=1; i <= m; i++) {
                    for(int j=1; j <= n; j++) {
                        f[i][j] = f[i][j-1];
                        if(i >= j) f[i][j] += f[i-j][j];
                    }
                }
                System.out.println(f[m][n]);
            }
            
        }
    }
}
/*
M 个苹果, N 个盘子
f[i][j] 表示i个苹果,j个盘子的放法数量。
有一个空盘和没有空盘的情况(每个盘子苹果去除一个)
f[i][j] = f[i][j-1] + f[i-j][j]
*/
posted @ 2020-07-07 22:20  li修远  阅读(106)  评论(0编辑  收藏  举报