• 注册
当前位置:1313e > 默认分类 >正文

openjudge2985(数字组合)

描述

有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
思路
可以开一个二维数组f[i][j],f[i][j]表示前i个数组合出来值为j有多少种情况
 1 #include
 2 #include
 3 using namespace std;
 4 int f[30][1005];
 5 int a[30];
 6 int main()
 7 {
 8  int n,m;
 9  scanf("%d%d",&n,&m);
10  for(int i=1;i<=n;i++)
11  {
12  scanf("%d",&a[i]);
13  f[i][a[i]]=1;
14  }
15  for(int i=1;i<=n;i++)
16  for(int j=1;j<=m;j++)
17  if(j>=a[i])f[i][j]+=f[i-1][j]+f[i-1][j-a[i]];
18  else f[i][j]+=f[i-1][0]+f[i-1][j];
19  printf("%d",f[n][m]);
20  return 0;
21 } 
View Code

 

转载于:https://www.cnblogs.com/Vay-1219-zzssc/p/5998191.html

本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 162202241@qq.com 举报,一经查实,本站将立刻删除。

最新评论

欢迎您发表评论:

请登录之后再进行评论

登录
相关推荐