P1025 数的划分
P1025 数的划分
f[i][j]表示把数i分成j份的方案数,分成两种情况,第一种是最小值是1,另一种是最小值不是1,对于不是1的情况,先都放一个1,那么f[i][j]=f[i-1][j-1]+f[i-j][j].
初始化f[i][i]=1
1 #include<iostream> 2 using namespace std; 3 int f[1000][1000]; 4 int n,k; 5 int main() 6 { 7 cin>>n>>k; 8 for(int i=1;i<=n;i++) 9 f[i][i]=1; 10 11 for(int i=1;i<=n;i++) 12 for(int j=1;j<=k;j++) 13 { 14 if(i>j) 15 f[i][j]=f[i-1][j-1]+f[i-j][j]; 16 } 17 cout<<f[n][k]; 18 return 0; 19 }