2210 数字组合(codevs)

2210 数字组合

 时间限制: 1 s
 空间限制: 32000 KB
 题目等级 : 黄金 Gold



题目描述 Description

在N个数中找出其和为M的若干个数。先读入正整数N和M, 再读入N个正数(可以有相同的数字,每个数字均在1000以内), 在这N个数中找出若干个数, 使它们的和是M, 把满足条件的数字组合都找出来以统计组合的个数,输出组合的个数(不考虑组合是否相同)。要求你的程序运行时间不超过1秒。

输入描述 Input Description

第一行是两个数字,表示N和M。
第二行起是N个数。

输出描述 Output Description

就一个数字,表示和为M的组合的个数。

样例输入 Sample Input

4 4
1 1 2 2

样例输出 Sample Output

3

数据范围及提示 Data Size & Hint

1

1

代码:

#include
#include
#include
using namespace std;
int n,m;
int a[110];
long long f[10001];
int main()
{
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)
	scanf("%d",&a[i]);
	memset(f,0,sizeof(f));
	f[0]=1;
	for(int i=1;i<=n;i++)
	for(int j=m;j>=a[i];j--)
	f[j]=f[j]+f[j-a[i]];
	cout<






你可能感兴趣的:(动态规划)