1. 给定一个正整数 n ,将 n 划分成若干正整数之和的划分数。
dp[0] = 1;
for(i = 1;i <= n; ++i) {
for(j = i;j <= n; ++j) {
dp[j] = dp[j] + dp[j-i];
}
}
2. 给定一个正整数 n 和 k,将 n 划分为 k 个正整数之和的划分数。
int f(int n,int k) {
if(n==k||k=1) return 1;
if(n<k) return 0;
if(n>k) return f(n-k,k)+f(n-1,k-1);
}
dp[0][0] = 1;
for(int i = 1;i <= n; ++i) {
for(int j = 1;j <= k; ++j) {
if(i >= j) dp[i][j] = dp[i - j][j] + dp[i - 1][j - 1];
}
}
3. 给定一个正整数 n 和 k,将 n 划分成最大数不超过 k 的划分数。
dp[0] = 1;
for(int i = 1;i <= n; ++i) {
for(int j = 1;j <= k; ++j) {
dp[i] = dp[i] + dp[i - j];
}
}