博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
P1060 开心的金明(洛谷,动态规划递推,01背包轻微变形题)
阅读量:6837 次
发布时间:2019-06-26

本文共 834 字,大约阅读时间需要 2 分钟。

题目链接:

基本思路:

基本上和01背包原题一样,不同点在于这里要的是最大重要度*价格总和,我们之前原题是

f[j]=max(f[j],f[j-v[i]]+p[i]);

那么这里直接改成f[j]=max(f[j],f[j-v[i]]+v[i]*p[i]);就好了

其中f[j]代表的意义是当给定初始金币为j时重要度*价格的最大总和,也就是价值那里在这题变成了重要度*价格

再比较一下看看?

原题:f[j]=max(f[j],f[j-v[i]]+p[i]);

这题:f[j]=max(f[j],f[j-v[i]]+v[i]*p[i]);

 

PS:我写了一篇很详细的01背包说明,如果下面ac代码有看不懂的地方可以去看看

哎呀,第一次写的时没认真看题,数组开太小了,全部RE...

 下面上ac代码

#include
#define ll long longusing namespace std;ll f[30000+10];ll v[25+10];//v单个价格ll p[25+10];//p单个重要度int main(){ ll n,m; cin>>n>>m;//n总钱数,m物品数 for(ll i=1;i<=m;i++)//输入基础数据 { scanf("%lld",&v[i]); scanf("%lld",&p[i]); } for(ll i=1;i<=m;i++)//遍历每个物品 for(ll j=n;j>=v[i];j--)//让当前剩余钱从n到v[i] { f[j]=max(f[j],f[j-v[i]]+v[i]*p[i]); } cout<
<

 

 

转载于:https://www.cnblogs.com/zyacmer/p/9973980.html

你可能感兴趣的文章
Linux防火墙
查看>>
如何通过一个值查找到值所在的SQL数据库表
查看>>
Python学习—面向对象学习上
查看>>
3.9 对称三位素数
查看>>
“旧城改造”的背后——银泰新零售阿里云解决方案(下)
查看>>
云原生生态周报 Vol. 2
查看>>
206. echarts的map地图入门案例
查看>>
一次非常有趣的 SQL 优化经历
查看>>
玩游戏?Linux才高端!
查看>>
桥接,仅主机,NAT模式网卡的配置
查看>>
web普通项目映射为maven项目
查看>>
钜亨×××登录功能是怎么实现的?
查看>>
科略教育—企业管理的六种模式
查看>>
JOB_QUEUE_PROCESSES 参数
查看>>
Oracle临时表空间使用分析
查看>>
java起源和基本数据类型
查看>>
CCNP学习笔记之EIGRP 上
查看>>
九、搭建织梦cms网站
查看>>
我的友情链接
查看>>
状态码503 Service Unavailable
查看>>