#include #include #include using namespace std; int main(){ int n, m; cin >> n >> m; vector arr(n); vector dp(m + 1, 0); unordered_map mp; for(int i = 0; i < n; i++){ cin >> arr[i]; mp[i]++; } dp[0] = 1; //dp[i] += dp[i - arr[j]] /* 0/1背包必须得j在外层,不依赖前面的d[i] for(int i = 1; i <= m; i++){ for(int j = 0; j < n; j++){ if(i - arr[j] >= 0) { dp[i] += dp[i - arr[j]]; } } }*/ //不重复利用元素 for(int j = 0; j < n; j++){ for(int i = m; i >= arr[j]; i--){ dp[i] += dp[i - arr[j]]; } } cout << dp[m] << endl; return 0; }