问题:
把M 个同样的苹果放在N 个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K 表示)5,1,1 和1,5,1 是同一种分法。
两种解法:
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> int fun(int n, int m) // 苹果数 盘子数 { if (n == 0) // 没有苹果 return 1; if (m == 0) // 没有盘子 return 0; if (m > n) // 盘子比苹果多 (一定有篮子为空) return fun19(n, n); else // 分两种,有无篮子为空 return fun19(n, m - 1) + fun19(n - m, m); } int main(void) { int a[15][15] = { 0 }; for (int i = 1; i < 15; i++) { a[0][i] = 1; // 0个苹果 a[i][0] = 0; // 0个篮子 } for (int n = 1; n < 15; n++) { for (int m = 1; m < 15; m++) { if (m > n) a[n][m] = a[n][n]; else a[n][m] = a[n][m - 1] + a[n - m][m]; } } int M, N, k; printf("请输入有几个苹果并回车:"); scanf("%d", &M); printf("请输入有几个篮子并回车:"); scanf("%d", &N); //k = a[M][N]; //动态规划 k = fun(M, N); // 递归 printf("%d ", k); system("pause"); return 0; }
=========== ========= ======== ======= ====== ===== ==== === == =
颂 无门和尚(宋)
春有百花秋有月,夏有凉风东有雪。
若无闲事挂心头,便是人间好时节。