原题传送门
注意恰好这个条件,必须要进行初始化
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N = 3100;
ll n, m;
ll f[N];
int main()
{
cin>>n>>m;
f[0] = 1;//这一步很关键,因为货币之和是恰好为m,所以必须初始化
for(int i = 1; i <= n; i ++ ){
ll v;
cin>>v;
for(int j = 0; j <= m; j ++ ){
if(j >= v) f[j] += f[j - v];
}
}
cout<<f[m]<<endl;
return 0;
}