对于还是菜鸟的我来说,确实是一个很好的题目。第一眼是深搜,后来算一下大概是2^100的递归,肯定要凉。
#include <bits/stdc++.h>
using namespace std;
const int maxn=10005;
int v[105],dp[maxn];
int main()
{
int N,M;
cin>>N>>M;
int i,j,k;
for(i=1;i<=N;i++)
scanf("%d",&v[i]);
dp[0]=1;
for(i=1;i<=N;i++){
for(j=M;j>=v[i];j--){
if(0!=dp[j-v[i]]){
dp[j]+=dp[j-v[i]];
}
}
}
printf("%d\n",dp[M]);
return 0;
}