动态规划-各种整数划分
2013-09-01 22:55
281 查看
1) 将n划分成若干正整数之和的划分数。
2) 将n划分成k个正整数之和的划分数。
3) 将n划分成最大数不超过k的划分数。
4) 将n划分成若干奇正整数之和的划分数。
5) 将n划分成若干不同整数之和的划分数。
2) 将n划分成k个正整数之和的划分数。
3) 将n划分成最大数不超过k的划分数。
4) 将n划分成若干奇正整数之和的划分数。
5) 将n划分成若干不同整数之和的划分数。
#include<cstdio> #include<cstring> const int NS=55; int n,m; int dp[5][NS][NS]; void init() { memset(dp,0,sizeof(dp)); //将n划分成最大数不超过k的划分数。 for (int i=0;i<NS;i++) dp[0][0][i]=1; for (int i=1;i<NS;i++) for (int j=1;j<NS;j++) if (i<j) dp[0][i][j]=dp[0][i][i]; else dp[0][i][j]=dp[0][i][j-1]+dp[0][i-j][j]; //将n划分成k个正整数之和的划分数。 dp[3][0][0]=1; for (int i=1;i<NS;i++) for (int j=1;j<=i;j++) { dp[3][i][j]=dp[3][i-1][j-1]+dp[3][i-j][j]; } //将n划分成若干奇偶正整数之和的划分数。 dp[2][0][0]=dp[1][0][0]=1; for (int i=1;i<NS;i++) for (int j=1;j<=i;j++) { dp[2][i][j]=dp[1][i-j][j]; dp[1][i][j]=dp[1][i-1][j-1]+dp[2][i-j][j]; } for (int i=1;i<NS;i++) for (int j=1;j<i;j++) { dp[1][i][i]+=dp[1][i][j]; dp[2][i][i]+=dp[2][i][j]; } //将n划分成若干不同整数之和的划分数。 for (int i=0;i<NS;i++) dp[4][0][i]=1; for (int i=1;i<NS;i++) for (int j=1;j<NS;j++) if (i<j) dp[4][i][j]=dp[4][i][i]; else dp[4][i][j]=dp[4][i][j-1]+dp[4][i-j][j-1]; } int main() { init(); while (~scanf("%d %d",&n,&m)) { printf("%d\n",dp[0] ); printf("%d\n",dp[3] [m]); printf("%d\n",dp[0] [m]); printf("%d\n",dp[1] ); printf("%d\n\n",dp[4] ); } return 0; }
相关文章推荐
- 整数划分 (递归、分治、动态规划)
- HDU 1028 Ignatius and the Princess III(母函数 或者 整数划分的DP动态规划)
- HDU 1028 整数的划分(动态规划)
- 动态规划-各种整数划分
- 整数划分问题解法2-动态规划
- hit1402 各种整数划分
- 整数划分问题解法2-动态规划
- 整数划分问题---动态规划、递归
- 整数划分问题(动态规划)
- 整数划分-划分数(DP动态规划)
- 整数划分(动态规划)
- 【动态规划/背包】整数划分的5种情况
- 整数划分问题(python)--递归 and 动态规划(m个盘里放n个苹果思想类似)
- 整数划分 --- 一个老生长谈的问题 动态规划
- nyoj-90 整数划分 (动态规划)
- 整数划分总结(动态规划)
- 整数划分问题---动态规划、递归
- 整数划分 --- 一个老生长谈的问题 动态规划
- 整数划分 --- 一个老生长谈的问题 动态规划
- OpenJudge简单的整数划分问题两种方法(DFS)(动态规划0ms),全局题号7215,已AC