首页 > 代码库 > 2985:数字组合

2985:数字组合

2985:数字组合

  • 查看
  • 提交
  • 统计
  • 提问
总时间限制: 
1000ms
 
内存限制: 
65536kB
描述
有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


关键字:01背包,逆序
 1 //*************************************
 2 //7-1   PAx: 620终端
 3 // Name: 2728:摘花生
 4 // Solut:  D.P.
 5 //************************************
 6 #include "stdafx.h"
 7 #include<bits/stdc++.h>
 8 #define N 21
 9 using namespace std;
10 int n, k;
11 int a[N],f[N*N*N];
12 int main()
13 {
14     scanf("%d%d", &n,&k);
15     for (int i = 1; i <= n; i++)
16     {
17         scanf("%d", &a[i]);
18     }
19     f[0] = 1;
20     for (int i = 1; i <= n; i++)
21     {
22         for (int j = k; j >= a[i]; j--)
23         {
24             f[j] += f[j - a[i]];
25         }
26     }
27     printf("%d\n", f[k]);
28     return 0;
29 }

 

2985:数字组合