我的AC代码:
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
int n,k;
int dp[7][210][210]; //dp[i][j][k]表示第i个数,取值为k,和为j的情况下的划分方案数
int vis[7][210][210];
void init(){
scanf("%d %d", &n, &k);
memset(dp, 0, sizeof(dp));
memset(vis, 0, sizeof(vis));
for(int i = 1; i <= n/k; i++){
dp[1][i][i] = 1;
}
}
void solve (){
for(int i = 1; i < k; i++){
for(int j = 1; j <= n; j++){
for(int l = 1; l <= n; l++){
if(dp[i][j][l]){
for(int u = l; u <= (n-j)/(k-i); u++) dp[i+1][j+u][u] += dp[i][j][l];
}
}
}
}
}
int main(int argc, const char * argv[])
{
init();
solve();
int result = 0;
for(int i = 1; i <= n-k+1; i++){
result += dp[k][n][i];
}
printf("%d\n", result);
}