您的位置:首页 > 其它

动态规划练习10:数字组合

2017-04-19 16:39 393 查看
题目简要:

描述有n个正整数,找出其中和为t(t也是正整数)的可能的组合方式。如:

n=5,5个数分别为1,2,3,4,5,t=5;

那么可能的组合有5=1+4和5=2+3和5=5三种组合方式。输入输入的第一行是两个正整数n和t,用空格隔开,其中1<=n<=20,表示正整数的个数,t为要求的和(1<=t<=1000)

接下来的一行是n个正整数,用空格隔开。输出和为t的不同的组合方式的数目。样例输入
5 5
1 2 3 4 5

样例输出
3


解题思路:

这就是一个背包问题,如果能算出结果,方式就加一种。

附代码:

#include<bits/stdc++.h>
using namespace std;
int b[50];
int main()
{
int n,t;
while(cin>>n>>t)
{
int a[n+1];

b[0]=1;
for(int i=1;i<=n;i++)
{

cin>>a[i];
}
for(int i=1;i<=n;i++)
{
for(int j=t;j>=a[i];j--)

b[j]+=b[j-a[i]];
}

cout<<b[n]<<endl;
}
return 0;
}

解题感受:

   又练习了一下背包问题,其实这是看课件之后做得,自己对于背包问题还没有完全掌握,还需加强。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  acm
相关文章推荐