DP题解(含注释)
2026-01-02 21:36:15
发布于:广东
1阅读
0回复
0点赞
代码:
#include <bits/stdc++.h>
using namespace std;
int a[105],dp[105][10005];
int main(){
int n,m;
cin >> n >> m;
for(int i = 1;i <= n;i++){
cin >> a[i];
}
dp[0][0] = 0;//初始值
for(int i = 1;i <= n;i++){//i来枚举菜品种类
for(int j = 1;j <= m;j++){//j用来算1-m元有多少种
if(j == a[i]){//如果刚好可以买得起(j == a[i]),那就是上一个+1
dp[i][j] = dp[i - 1][j] + 1;
}
if(j > a[i]){//如果买完之后还剩钱(j > a[i]),那就是dp[i - 1][j] + dp[i - 1][j - a[i]]
dp[i][j] = dp[i - 1][j] + dp[i - 1][j - a[i]];
}
if(j < a[i]){//如果买不起(j < a[i]),,那就等于上一个
dp[i][j] = dp[i - 1][j];
}
}
}
cout << dp[n][m];
return 0;
}
这里空空如也







有帮助,赞一个