DP计算方案数,有点像递推
#include<bits/stdc++.h>
using namespace std;
const int MAXN=102;
const int MAXV=10002;
int main()
{
int n,m;cin>>n>>m;
int w[MAXN]={};
int dp[MAXV]={};
for(int i=1;i<=n;i++){
cin>>w[i];
}
for(int i=1;i<=n;i++){
for(int j=m;j>=w[i];j--){
if(j>w[i])
dp[j]=dp[j]+dp[j-w[i]];//如果当前剩余钱数大于这道菜价格,则等于不吃这道菜(dp[j])的方案数加上吃这道菜(dp[j-w[i]])的方案数
else if(j==w[i]){
dp[j]=dp[j]+1;//如果当前剩余钱数等于这道菜价格,则等于当前已有的方案数加上1即可
}
}
}
cout<<dp[m];
return 0;
}