7219:复杂的整数划分问题
题目链接
#include<iostream>
using namespace std;
const int N = 50;
int dp1[55][55] = {
0 }, dp2[55][55] = {
0 };
int f[55][55] = {
0 }, g[55][55] = {
0 };
void solve() {
for (int i = 1; i <= N; i++) {
for (int j = 1; j <= N; j++) {
if (i < j) {
dp1[i][j] = 0;
dp2[i][j] = dp2[i][i];
}
else if (i == j) {
dp1[i][j] = 1;
dp2[i][j] = dp2[i][j - 1] + 1;
}
else {
dp1[i][j] = dp1[i - 1][j - 1] + dp1[i - j][j];
dp2[i][j] = dp2[i - j][j-1] + dp2[i][j - 1];
}
}
}
f[0][0] = 1, g[0][0] = 1;
for (int i = 1; i <= N; i++) {
for (int j = 1; j <= i; j++) {
g[i][j] = f[i - j][j];
f[i][j] = f[i - 1][j - 1] + g[i - j][j];
}
}
}
int main() {
int n,k;
solve();
while (cin >> n >> k) {
cout << dp1[n][k] << endl;
cout << dp2[n][n] << endl;
int sum = 0;
for (int i = 1; i <= n; i++) {
sum += f[n][i];
}
cout << sum<<endl;
}
return 0;
}
参考大佬的代码