信息学奥赛一本通 1225:金银岛 | OpenJudge NOI 4.6 1797:金银岛
【题目链接】
ybt 1225:金银岛
OpenJudge NOI 4.6 1797:金银岛
【题目考点】
1. 贪心
2. 部分背包问题
【解题思路】
该题为部分背包问题
1. 贪心选择性质的证明:
贪心选择:每次尽量多地选择单位价值最高的金属
单位价值:金属的价值除以重量,即vi/niv_i/n_ivi/ni
- 证明:存在最优解包含第一次贪心选择
假设对于所有最优解,都不包含第一次的贪心选择。
即假设单位价值最高的金属为g,存在重量为w的金属g没有被选择,不在最优解中。
在最优解中选择重量为w的金属(也许是几种金属),这部分金属的价值为vav_ava,重量为w的金属g的价值为vgv_gvg,因为金属g的单位价值最高,所以一定有vg≥vav_g \ge v_avg≥va。用重为w的金属g替换最优解中重为w的金属,此时这些选择的金属包含贪心选择,价值不会比替换前减少,也是最优解,这与假设相悖,假设不成立,原命题得证。
- 证明:前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:金银岛相关推荐
- 信息学奥赛一本通 1209:分数求和 | OpenJudge NOI 1.13 12:分数求和
[题目链接] ybt 1209:分数求和 OpenJudge NOI 1.13 12:分数求和 [题目考点] 1. 求最大公约数 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 ...
- 信息学奥赛一本通(基础算法与数据结构-题解汇总目录)
信息学奥赛一本通(C++版)在线评测系统 基础(二)基础算法 更新中...... 第一章高精度计算 1307[例1.3]高精度乘法 1308[例1.5]高精除 1309[例1.6]回文数(Noip ...
- 信息学奥赛一本通 1278:【例9.22】复制书稿(book) | 洛谷 P1281 书的复制
[题目链接] ybt 1278:[例9.22]复制书稿(book) 洛谷 P1281 书的复制 [题目考点] 1. 动态规划:线性动规 [解题思路] 该题可以抽象为:将由m个数字构成的序列分成k个子段 ...
- 信息学奥赛一本通 提高篇 第六部分 数学基础 相关的真题
第1章 快速幂 1875:[13NOIP提高组]转圈游戏 信息学奥赛一本通(C++版)在线评测系统 第2 章 素数 第 3 章 约数 第 4 章 同余问题 第 5 章 矩阵乘法 第 6 章 ...
- 信息学奥赛一本通 2021:【例4.6】最大公约数
[题目链接] ybt 2021:[例4.6]最大公约数 [题目考点] 1. while循环 2. 求最大公约数 辗转相减法 辗转相除法 [解题思路] 解法1:枚举 取较小数字,从该数字的值开始从大到小 ...
- 信息学奥赛一本通(C++版) 刷题 记录
总目录详见:https://blog.csdn.net/mrcrack/article/details/86501716 信息学奥赛一本通(C++版) 刷题 记录 http://ybt.ssoier. ...
- 信息学奥赛一本通 (C++)上机练习
信息学奥赛一本通(C++)上机练习 此书为娃儿的第一本刷题书.娃儿现在四年级 ,希望他能坚持下来.特开贴加油 luogu: disangan223 第一部分 C++语言 第一章 C++语言入门 T10 ...
- 信息学奥赛一本通_长乐一中老师演绎“奥赛传奇”
董永建(右一)在课堂上. 台海网5月14日讯 据福州晚报报道,长乐一中有一位"传奇"老师--15年来,他辅导的学生在全国高中生信息学奥赛中获金牌3人次.银牌3人次.铜牌5人次:在全 ...
最新文章
- 乔春洋:网上品牌战略
- android开发桌面源码,android launcher 源码 自己开发启动桌面
- c++ 二分查找的函数 lower_bound upper_bound binary_search
- Zabbix server is not running 报错的排查
- JoyOI(TYVJ)1071-LCIS【线性dp,LIS,LCS】
- [算法]-排序算法之希尔排序
- “约见”面试官系列之常见面试题之第五十五篇之清除浮动的方法(建议收藏)
- 算法动画 - 理解函数曲线
- AI赋能DevOps:数据驱动的全栈工程师实践
- c语言中row和col的意思,这段c代码的含义时什么,怎么理解?
- mysql从挂了数据怎么恢复_详解MySQL误操作后怎样进行数据恢复
- HDU 5410 CRB and His Birthday
- 区块链学习笔记(二)
- python 遍历文件夹文件代码
- HFSS19 官方中文教程系列 L06
- 《Qt基础教程之Qt学习之路》
- [UPF]Synopsys推荐的UPF流程及Power Domain简介
- 华云数据入围2021新经济年度巅峰榜
- 【历史上的今天】8 月 12 日:IBM 首款个人计算机问世;Tumblr 被收购
- 华清远见-重庆中心-HTML、CSS技术总结