原题地址:http://acm.nyist.net/JudgeOnline/problem.php?pid=1249
思路:背包问题。
#include<stdio.h>
#include<string.h>
int main()
{
int t,n,m,a[1010],dp[1010],i,j;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
memset(dp,0,sizeof(dp));
dp[0]=1;
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
for(i=1;i<=n;i++)
for(j=m;j>=a[i];j--)
{
if(dp[j-a[i]]>0)
dp[j]+=dp[j-a[i]];
}
printf("%d\n",dp[m]);
}
return 0;
}