运动鞋和休闲鞋谁大:c++数的划分

来源:百度文库 编辑:查人人中国名人网 时间:2024/05/07 08:50:00
将整数n分成k份,且每份不能为空,任意两份不能相同(不考虑顺序)。
例如:n=7,k=3,下面三种分法被认为是相同的。
1,1,5; 1,5,1; 5,1,1;
问有多少种不同的分法。

请把这个程序帮我详细解说一下,谢谢。
#include<iostream>
using namespace std;
int main()
{
int m,n,i,j,k;
long f[7][201];
cin>>n>>m;
memset(f,0,sizeof(f));
for(i=1;i<=n;i++){f[1][i]=1;}
for(i=2;i<=m;i++)
{
for(j=i;j<=n;j++)
{
if(i==j)f[i][j]=1;
else
{for(k=0;k<=i-1;k++)f[i][j]=f[i][j]+f[i-k][j-i];}}}
cout<<f[m][n];
system("pause");
return 0;
}

类似于动态规划
这是个C程序
里面的状态转移方程是
f[i,j] = 1 + f[i-k,j-1].....