1 条题解
-
1
这是一个经典的动态规划(背包问题) 代码如下 不懂看注释
#include<iostream> #include<cstdio> #include<cmath> #include<algorithm> using namespace std; int dp[30005]; int main() { int shuliang,qian;//希望购买物品的个数 和 总钱数 cin>>qian>>shuliang; int jiage[shuliang],zhongyao[shuliang];//存物品价格,重要度 for(int i = 0;i<shuliang;i++) { int tmp;//输入此物品重要度 cin>>jiage[i];//输入此物品价格 cin>>tmp; zhongyao[i]=tmp * jiage[i];//由于题目要求积,把重要度直接换成积,组成基础最优方案,不然后面要写好多次 } //遍历物品 for(int i = 0;i<shuliang;i++) { //要求最大值,就从上往下找 for(int j = qian;j>=1;j--) { //如果它的价格>=上一个方案价格 if(j >= jiage[i]) { //如果有更好的方案,就把这个价格的最优方案替换 dp[j] = max(dp[j],dp[j-jiage[i]] + zhongyao[i]); } } } cout<<dp[qian]<<endl; return 0; }
写题解不易,还望各位点个赞
信息
- ID
- 413
- 时间
- 1000ms
- 内存
- 64MiB
- 难度
- 7
- 标签
- 递交数
- 16
- 已通过
- 11
- 上传者