本文共 807 字,大约阅读时间需要 2 分钟。
将m个苹果放入n个盘子中的分法数目可以通过递归或动态规划来解决。递归方法根据盘子数目进行分治,而动态规划则通过预处理中间结果来优化计算。
int fun(int m, int n) { if (m == 0 || n == 1) return 1; if (n > m) return fun(m, m); else return fun(m, n - 1) + fun(m - n, n);} 初始化一个二维数组mat,其中mat[i][j]表示将i个苹果放入j个盘子中的分法数目。填充逻辑如下:
mat[i][0] = 0(无苹果不可行),mat[0][j] = 1(无苹果算一种分法),mat[i][1] = 1(只能放一个盘子)。int[][] mat = new int[m + 1][n + 1];for (int i = 0; i <= m; i++) { mat[i][0] = 0; mat[i][1] = 1;}for (int i = 0; i <= n; i++) { mat[0][i] = 1;}for (int i = 1; i <= m; i++) { for (int j = 1; j <= n; j++) { if (j > i) { mat[i][j] = mat[i][i]; } else { mat[i][j] = mat[i][j - 1] + mat[i - j][j]; } }}return mat[m][n]; 通过上述方法,可以高效地计算将m个苹果放入n个盘子中的分法数目。
转载地址:http://krdfk.baihongyu.com/