poj 3111 二分水题
来源:互联网 发布:吾爱破解软件 编辑:程序博客网 时间:2024/05/15 15:58
题意:有n个物品的重量和价值分别是w[i]和v[i],从中选出K个物品使得单位重量的价值最大
贪心的反例是显然的,nyoj的样例就是
本题是个二分的很好例子,可以理解成二分得到一个阈值,然后判断是否够k个,以此得到最优解,而这个正确性也是显然的
#include <cstdio> #include <stdlib.h> #include <iostream> #include <algorithm> #define rep(i, j, k) for(int i = j; i <= k; i++)using namespace std; const int INF=0x3f3f3f3f; int n,k; struct cadongllas{ double v,w,tmp; int id; }s[100005]; bool cmp(cadongllas x,cadongllas y){ return x.tmp>y.tmp; } bool judge(double d){ double sum = 0;rep (i, 1, n) s[i].tmp=s[i].v-d*s[i].w; sort (s + 1, s + 1 + n, cmp);rep (i, 1, k) sum+=s[i].tmp; return sum>=0; } int main(){ while(scanf("%d%d",&n,&k)!=EOF){ rep (i, 1, n)scanf ("%lf%lf", &s[i].v, &s[i].w), s[i].id = i; double l = 0, r = 0x7fffffff * 1.0;rep (i, 0, 101){ double mid=(l+r)/2; if(judge(mid)) l=mid; else r=mid; } rep (i, 1, k) printf("%d ",s[i].id); printf("\n"); } return 0; }
0 0
- poj 3111 二分水题
- poj 3122 二分水题
- POJ 3122 Pie(二分水题)
- 二分水题
- hdu 1551 二分水题
- HDU 5101 二分水题
- poj 1064 Cable master(二分水)
- HDU 2199 --Can you solve this equation?【二分水题】
- Codeforces--237C--Primes on Interval(二分水题)
- HDU 2199 Can you solve this equation? 二分水题
- CodeForces 165B Burning Midnight Oil(二分水题)
- 树链剖分水题I
- FZU 2082 过路费 树链剖分水题
- 算法系列之二:三只水桶等分水问题
- 算法系列之二:三只水桶等分水问题
- 算法系列之二:三只水桶等分水问题
- 算法系列之二: 三只水桶等分水问题
- 算法系列之二: 三只水桶等分水问题
- Photoshop文字特效——带有积雪效果的玻璃质感文字
- Java代码获取classpath路径方法和资源文件的读取方法
- VS2015使用小技巧 逐过程调试与逐语句调试的区别
- 递归算法
- libreoffice插入公式
- poj 3111 二分水题
- js小技巧
- php post请求http接口
- poj1066 && nyoj83
- QT-实现简单的学生信息管理_初识QT
- 10055---一步步优化JVM一:概述、方法及需求
- openstack vs docker
- jquery学习总结
- android 音乐播放器,带seekBar滑动