数的划分 -----动态规划
2014-04-24 13:00
120 查看
题目描述 Description
将整数n分成k份,且每份不能为空,任意两种划分方案不能相同(不考虑顺序)。
例如:n=7,k=3,下面三种划分方案被认为是相同的。
1 1 5
1 5 1
5 1 1
问有多少种不同的分法。
输入描述 Input Description
输入:n,k (6<n<=200,2<=k<=6)
输出描述 Output Description
输出:一个整数,即不同的分法。
样例输入 Sample Input
7 3
样例输出 Sample Output
4
数据范围及提示 Data Size & Hint
{四种分法为:1,1,5;1,2,4;1,3,3;2,2,3;}
解题思路:
动态规划的划分数,有两种解法。
解法一:
代码:
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
int main()
{
int n,k,g[7][201],i,j;
while(scanf("%d%d",&n,&k)!=EOF)
{
memset(g,0,sizeof(g));
for(j=0;j<=n;j++)
{
g[1][j]=1;
}
for(i=2;i<=k;i++)
{
for(j=0;j<=n-k;j++)
{
if(j>=i)
{
g[i][j]=g[i-1][j]+g[i][j-i];
}
else
{
g[i][j]=g[i-1][j];
}
}
}
cout<<g[k][n-k]<<endl;
}
return 0;
}
解法二:
#include<cstdio>
using namespace std;
int dp[210][7],n,k,i,j;
int main()
{
scanf("%d%d",&n,&k);
dp[0][0] = 1;
for(i=1;i<=n;i++) dp[i][1] = 1;
for(i=1;i<=n;i++)
{ for(j=1;j<=k;j++)
{
if(i>=j)dp[i][j] = dp[i-j][j] + dp[i-1][j-1];
}
}
printf("%d\n",dp
[k]);
return 0;
}
将整数n分成k份,且每份不能为空,任意两种划分方案不能相同(不考虑顺序)。
例如:n=7,k=3,下面三种划分方案被认为是相同的。
1 1 5
1 5 1
5 1 1
问有多少种不同的分法。
输入描述 Input Description
输入:n,k (6<n<=200,2<=k<=6)
输出描述 Output Description
输出:一个整数,即不同的分法。
样例输入 Sample Input
7 3
样例输出 Sample Output
4
数据范围及提示 Data Size & Hint
{四种分法为:1,1,5;1,2,4;1,3,3;2,2,3;}
解题思路:
动态规划的划分数,有两种解法。
解法一:
代码:
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
int main()
{
int n,k,g[7][201],i,j;
while(scanf("%d%d",&n,&k)!=EOF)
{
memset(g,0,sizeof(g));
for(j=0;j<=n;j++)
{
g[1][j]=1;
}
for(i=2;i<=k;i++)
{
for(j=0;j<=n-k;j++)
{
if(j>=i)
{
g[i][j]=g[i-1][j]+g[i][j-i];
}
else
{
g[i][j]=g[i-1][j];
}
}
}
cout<<g[k][n-k]<<endl;
}
return 0;
}
解法二:
#include<cstdio>
using namespace std;
int dp[210][7],n,k,i,j;
int main()
{
scanf("%d%d",&n,&k);
dp[0][0] = 1;
for(i=1;i<=n;i++) dp[i][1] = 1;
for(i=1;i<=n;i++)
{ for(j=1;j<=k;j++)
{
if(i>=j)dp[i][j] = dp[i-j][j] + dp[i-1][j-1];
}
}
printf("%d\n",dp
[k]);
return 0;
}
相关文章推荐
- 整数划分问题(动态规划)
- 整数划分 --- 一个老生长谈的问题 动态规划
- 整数划分问题---动态规划、递归
- 【动态规划】划分整数
- OpenJudge简单的整数划分问题两种方法(DFS)(动态规划0ms),全局题号7215,已AC
- 凸多边形的最优三角划分最详细求解步骤演示[动态规划]
- 算法训练 数的划分 (动态规划)
- 整数划分问题解法2-动态规划
- 动态规划求解集合的划分
- OJ 7215 简单的整数划分问题__动态规划
- 经典问题 整数划分(动态规划)
- 4000 集合的划分问题(动态规划DP)
- 动态规划_数字的划分
- 动态规划_求连续整数的划分方案总数
- 动态规划解整数划分
- OpenJ_Bailian - 4117简单的整数划分问题-递归&动态规划
- 【动态规划/背包】整数划分的5种情况
- 整数划分(动态规划)
- 整数划分问题(python)--递归 and 动态规划(m个盘里放n个苹果思想类似)
- n划分为1,2,3等等(动态规划)