整数划分问题:900. 整数划分
注意划分出的数可以取\(0\)。
const int N=1010;
int f[N][N];
int n,m;
int main()
{
int T;
cin>>T;
while(T--)
{
memset(f,0,sizeof f);
cin>>m>>n;
f[0][0]=1;
for(int i=0;i<=m;i++)
for(int j=1;j<=n;j++)
{
f[i][j]=f[i][j-1];
if(i >= j) f[i][j]+=f[i-j][j];
}
cout<<f[m][n]<<endl;
}
//system("pause");
return 0;
}
完全背包求方案数
const int N=1010;
int f[N];
int n,m;
int main()
{
int T;
cin>>T;
while(T--)
{
memset(f,0,sizeof f);
cin>>m>>n;
f[0]=1;
for(int i=1;i<=n;i++)
for(int j=i;j<=m;j++)
f[j]+=f[j-i];
cout<<f[m]<<endl;
}
//system("pause");
return 0;
}