题意:求k个数小于等于n的数和为n的方案数.
dp[i][j]表示用了i个数和为j的方案数,然后转移下就好了.
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <iostream>
#include <map>
#include <set>
#include <vector>
#include <queue>
using namespace std;
#define maxn 111
#define mod 1000000
int dp[maxn][maxn];
int n, k;
int main () {
while (cin >> n >> k && n+k) {
memset (dp, 0, sizeof dp);
dp[0][0] = 1;
for (int i = 1; i <= k; i++) {
for (int j = 0; j <= n; j++) {
for (int l = 0; l <= j; l++) {
dp[i][j] += dp[i-1][l];
dp[i][j] %= mod;
}
}
}
cout << dp[k][n] << "\n";
}
return 0;
}