基础动态规划
#include
using namespace std;
//n表示菜道总数,m表示钱的总数;
int n,m;
int a[1010];
//f[i][j]表示前i道菜用光j元钱道办法总数;
int f[1010][1010];
int main(){
cin >> n >> m;
for (int i = 1; i <= n; i++){
cin >> a[i];
}
for (int i = 1; i <= n; i ++){
for (int j = 1; j <= m; j ++){
if (j == a[i]){
f[i][j] = f[i-1][j] + 1;
} else if (j > a[i]){
f[i][j] = f[i-1][j] + f[i-1][j - a[i]];
} else if (j < a[i]){
f[i][j] = f[i-1][j];
}
}
}
cout << f[n][m] << endl;
return 0;
}