【题目链接】

ybt 1225:金银岛
OpenJudge NOI 4.6 1797:金银岛

【题目考点】

1. 贪心

2. 部分背包问题

【解题思路】

该题为部分背包问题

1. 贪心选择性质的证明:

贪心选择:每次尽量多地选择单位价值最高的金属
单位价值:金属的价值除以重量,即vi/niv_i/n_ivi​/ni​

  1. 证明:存在最优解包含第一次贪心选择

假设对于所有最优解,都不包含第一次的贪心选择。
即假设单位价值最高的金属为g,存在重量为w的金属g没有被选择,不在最优解中。
在最优解中选择重量为w的金属(也许是几种金属),这部分金属的价值为vav_ava​,重量为w的金属g的价值为vgv_gvg​,因为金属g的单位价值最高,所以一定有vg≥vav_g \ge v_avg​≥va​。用重为w的金属g替换最优解中重为w的金属,此时这些选择的金属包含贪心选择,价值不会比替换前减少,也是最优解,这与假设相悖,假设不成立,原命题得证。

  1. 证明:前k次都进行贪心选择,最优解包含第k+1次贪心选择

假设对于所有最优解,都不包含第k+1次的贪心选择。
即假设此时剩下的金属中单位价值最高的金属为g,如果做贪心选择,可以选择重量为w的金属g。但最优解没有做贪心选择,说明最优解中存在至少重量为w的单位价值等于或低于金属g的金属。
在最优解中选择重量为w的单位价值等于或低于金属g的金属,这部分金属的价值为vav_ava​,重量为w的金属g的价值为vgv_gvg​,因为金属g的单位价值最高,所以一定有vg≥vav_g \ge v_avg​≥va​。用重为w的金属g替换最优解中重为w的金属,此时这些选择的金属包含贪心选择,价值不会比替换前减少,也是最优解,这与假设相悖,假设不成立,原命题得证。

2. 具体做法

将所有金属按单位价值vi/niv_i/n_ivi​/ni​降序排序,顺序遍历

  • 如果该金属重量小于等于剩余可放重量,那么选择该金属的全部重量,统计其价值。
  • 如果该金属重量大于剩余可放重量,那么选择该金属的重量为:剩余可放重量,统计这部分金属的价值。

输出选择的金属的总价值。

【题解代码】

解法1:贪心

#include<bits/stdc++.h>
using namespace std;
#define N 105
struct Metal
{double n, v;
};
bool cmp(Metal a, Metal b)
{return a.v/a.n > b.v/b.n;
}
int main()
{int k, w, s;Metal m[N];cin >> k;while(k--){double totVal = 0;cin >> w >> s;for(int i = 1; i <= s; ++i)cin >> m[i].n >> m[i].v;sort(m+1, m+1+s, cmp);for(int i = 1; i <= s; ++i){if(w >= m[i].n)//w:剩余可放重量 {totVal += m[i].v;w -= m[i].n;}else{totVal += m[i].v/m[i].n*w;break;}}cout << fixed << setprecision(2) << totVal << endl;}return 0;
}

信息学奥赛一本通 1225:金银岛 | OpenJudge NOI 4.6 1797:金银岛相关推荐

  1. 信息学奥赛一本通 1209:分数求和 | OpenJudge NOI 1.13 12:分数求和

    [题目链接] ybt 1209:分数求和 OpenJudge NOI 1.13 12:分数求和 [题目考点] 1. 求最大公约数 2. 求最小公倍数 [解题思路] 求最大公约数,可以用辗转相除法.具体 ...

  2. 信息学奥赛一本通 1294:Charm Bracelet | OpenJudge NOI 2.6 7113:Charm Bracelet | 洛谷 P2871

    [题目链接] ybt 1294:Charm Bracelet OpenJudge NOI 2.6 7113:Charm Bracelet 洛谷 P2871 [USACO07DEC]Charm Brac ...

  3. 信息学奥赛一本通(基础算法与数据结构-题解汇总目录)

    信息学奥赛一本通(C++版)在线评测系统 基础(二)基础算法   更新中...... 第一章高精度计算 1307[例1.3]高精度乘法 1308[例1.5]高精除 1309[例1.6]回文数(Noip ...

  4. 信息学奥赛一本通 1278:【例9.22】复制书稿(book) | 洛谷 P1281 书的复制

    [题目链接] ybt 1278:[例9.22]复制书稿(book) 洛谷 P1281 书的复制 [题目考点] 1. 动态规划:线性动规 [解题思路] 该题可以抽象为:将由m个数字构成的序列分成k个子段 ...

  5. 信息学奥赛一本通 提高篇 第六部分 数学基础 相关的真题

    第1章   快速幂 1875:[13NOIP提高组]转圈游戏 信息学奥赛一本通(C++版)在线评测系统 第2 章  素数 第 3 章  约数 第 4 章  同余问题 第 5 章  矩阵乘法 第 6 章 ...

  6. 信息学奥赛一本通 2021:【例4.6】最大公约数

    [题目链接] ybt 2021:[例4.6]最大公约数 [题目考点] 1. while循环 2. 求最大公约数 辗转相减法 辗转相除法 [解题思路] 解法1:枚举 取较小数字,从该数字的值开始从大到小 ...

  7. 信息学奥赛一本通(C++版) 刷题 记录

    总目录详见:https://blog.csdn.net/mrcrack/article/details/86501716 信息学奥赛一本通(C++版) 刷题 记录 http://ybt.ssoier. ...

  8. 信息学奥赛一本通 (C++)上机练习

    信息学奥赛一本通(C++)上机练习 此书为娃儿的第一本刷题书.娃儿现在四年级 ,希望他能坚持下来.特开贴加油 luogu: disangan223 第一部分 C++语言 第一章 C++语言入门 T10 ...

  9. 信息学奥赛一本通_长乐一中老师演绎“奥赛传奇”

    董永建(右一)在课堂上. 台海网5月14日讯 据福州晚报报道,长乐一中有一位"传奇"老师--15年来,他辅导的学生在全国高中生信息学奥赛中获金牌3人次.银牌3人次.铜牌5人次:在全 ...

最新文章

  1. 乔春洋:网上品牌战略
  2. android开发桌面源码,android launcher 源码 自己开发启动桌面
  3. c++ 二分查找的函数 lower_bound upper_bound binary_search
  4. Zabbix server is not running 报错的排查
  5. JoyOI(TYVJ)1071-LCIS【线性dp,LIS,LCS】
  6. [算法]-排序算法之希尔排序
  7. “约见”面试官系列之常见面试题之第五十五篇之清除浮动的方法(建议收藏)
  8. 算法动画 - 理解函数曲线
  9. AI赋能DevOps:数据驱动的全栈工程师实践
  10. c语言中row和col的意思,这段c代码的含义时什么,怎么理解?
  11. mysql从挂了数据怎么恢复_详解MySQL误操作后怎样进行数据恢复
  12. HDU 5410 CRB and His Birthday
  13. 区块链学习笔记(二)
  14. python 遍历文件夹文件代码
  15. HFSS19 官方中文教程系列 L06
  16. 《Qt基础教程之Qt学习之路》
  17. [UPF]Synopsys推荐的UPF流程及Power Domain简介
  18. 华云数据入围2021新经济年度巅峰榜
  19. 【历史上的今天】8 月 12 日:IBM 首款个人计算机问世;Tumblr 被收购
  20. 华清远见-重庆中心-HTML、CSS技术总结

热门文章

  1. 2K/XP/2003 系统登录密码破解
  2. powerdesigner2
  3. 一文看懂用Python读取Excel数据
  4. 猿宵节正确打开方式:你要的大数据、机器学习、神经网络…已配齐
  5. Simulink之不可控整流电路
  6. STM32之SysTick原理
  7. 干掉 BeanUtils!试试这款 Bean 自动映射工具,真心强大!
  8. 在创业公司工作是一种什么样的体验?
  9. 终于有人把tomcat讲清楚了。
  10. Maven Assembly Plugin - 如何将Maven工程打成一个可执行jar包