#include #include using namespace std; int n, s, a[1001], dp[1001]; void in() { scanf("%d %d", &n, &s); for (int i = 0; i < n; i++) scanf("%d", &a[i]); } void solve() { dp[0] = 1; //Here we have infinite number of coins from each type. for (int i = 0; i < n; i++) for (int j = a[i]; j <= s; j++) dp[j] += dp[j - a[i]]; // Another way for doing the same thing. // for (int i = 0; i < n; i++) // for (int j = 0; j <= s - a[i]; j++) // dp[j + a[i]] += dp[j]; /* //Here we have finite number of coins from each type. for (int i = 0; i < n; i++) for (int j = s - a[i]; j >= 0; j--) dp[j + a[i]] += dp[j]; // Another way for doing the same thing. // for (int i = 0; i < n; i++) // for (int j = s; j >= a[i]; j--) // dp[j] += dp[j - a[i]];/ */ printf("%d\n", dp[s]); } int main() { in(); solve(); return 0; }