将正整数n 表示成一系列正整数之和,n=n1+n2+…+nk, 其中n1>=n2>=…>=nk>=1 ,k>=1 。
正整数n 的这种表示称为正整数n 的划分。正整数n 的不同的划分个数称为正整数n 的划分数。
5
7
#include<bits/stdc++.h>
using namespace std;
int dp[55][55];
int main()
{
int n;
while(cin>>n)
{
memset(dp,0,sizeof(dp));
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
if(i==1||j==1) dp[i][j]=1;
else
{
if(i<j) dp[i][j]=dp[i][i];
else if(i==j) dp[i][j]=dp[i][j-1]+1;
else dp[i][j]=dp[i-j][j]+dp[i][j-1];
}
}
printf("%d\n",dp[n][n]);
}
return 0;
}
本文详细介绍了整数划分问题,并通过动态规划的方法给出了一个高效的解决方案。文中提供了完整的代码实现及两个参考博客链接。
447

被折叠的 条评论
为什么被折叠?



