51nod 1257 背包问题 V3
来源:互联网 发布:台湾剧1983星星知我心 编辑:程序博客网 时间:2024/05/16 00:32
二分法
分数规划
修改 隐藏话题
1257 背包问题 V3
基准时间限制:3 秒 空间限制:131072 KB 分值: 80 难度:5级算法题
收藏
关注
N个物品的体积为W1,W2......Wn(Wi为整数),与之相对应的价值为P1,P2......Pn(Pi为整数),从中选出K件物品(K <= N),使得单位体积的价值最大。
Input
第1行:包括2个数N, K(1 <= K <= N <= 50000)第2 - N + 1行:每行2个数Wi, Pi(1 <= Wi, Pi <= 50000)
Output
输出单位体积的价值(用约分后的分数表示)。
Input示例
3 22 25 32 1
Output示例
3/4
https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1257
这个题之前一直想不通,最后是发现缺乏分数规划的知识。。知道了分数规划,,就知道 ,,这个题二分秒过 = =、。
关于分数规划
摘自 http://blog.csdn.net/orpinex/article/details/6973778
分数规划问题,是指这样一类问题:
要求f(x)/g(x)的最值,其中f(x),g(x)都是线性函数,而其中被研究的最多的是0-1分数规划,即求这样的一个式子的极值
r=(∑(ci*xi))/(∑(di*xi)),其中xi∈{0,1}
我们可以把这个式子变换一下
z=(∑(ci*xi))-r'*(∑(di*xi)),其中z是左边这个式子的最大(小)值
由于di为正数,xi为非负数,所以
r'>r 时 z(r')<0
r'=r 时 z(r')=0
r'<r 时 z(r')>0
易证z函数严格单调递减,那么我们可以二分r',直到z(r')=0,此时r'=r,问题得解
PS:z函数也是凸函数
除了二分,还有一种算法叫Dinkelbach算法
每次将r'代入z函数中计算以后,我们将得到一组x
让r''=(∑(ci*xi))/(∑(di*xi))
当r''=r'时,r''就是我们需要的解
否则将r'=r'',继续迭代
这种方法比二分法要快一点
等于利用分数规划。。二分答案,然后判断答案是否成立 - -
阅读全文
0 0
- 51nod 1257 背包问题 V3
- 51nod 1257 背包问题V3
- 51Nod-1257-背包问题 V3
- 51nod 1257 背包问题 V3
- 51 nod oj 1257 背包问题 V3【01分数规划】
- 51nod 1257 背包问题 V3(二分)
- 背包问题-----51Nod
- 【51Nod1257】背包问题 V3
- 51nod 1085 背包问题
- 51nod多重背包问题
- 51nod 1085 背包问题
- 51nod 多重背包问题
- 51Nod--1085背包问题
- 51nod-【多重背包问题】
- 51nod 1085 背包问题
- 51Nod 1085 背包问题
- 51Nod 1085 背包问题
- 51nod 1085 背包问题
- 快速理解MySQL中主键与外键的实例教程
- ALSA 接口编程实例——语音聊天
- css基础笔记1:input与img同一行内对齐
- 装机
- 一些觉得有裨益的书籍的电子版---------永久更新
- 51nod 1257 背包问题 V3
- Node.js HelloWorld的小细节
- php可变变量
- 阿里云数据库挑战赛"SQL优化大师"获奖案例
- 用springBoot与dubbo、 zookeeper、redis整合做了一个弹幕网站
- 深入理解Express
- Java编程要点之 I/O 流详解
- Java 并发开发:Lock 框架详解
- 加入Webhacking.kr,从此赚取积分走上人生巅峰