NYOJ 914 Yougth的最大化
2016-08-27 15:39
381 查看
题目链接
第一次遇到二分法和贪心结合的题目,算法很妙,把中间值输出理解了一下,大概是保证有解的情况下,通过二分法使单位重量的价值最大,还运用了一个结论,就是多个物品单位重量的价值一定小于单位重量价值最大的物品,我想这也许可以算一个模板题了吧,,有的写法只能先记住了。
代码出自别人,结论证明思路及代码
如下代码链接
感觉这个代码更容易理解一些
第一次遇到二分法和贪心结合的题目,算法很妙,把中间值输出理解了一下,大概是保证有解的情况下,通过二分法使单位重量的价值最大,还运用了一个结论,就是多个物品单位重量的价值一定小于单位重量价值最大的物品,我想这也许可以算一个模板题了吧,,有的写法只能先记住了。
代码出自别人,结论证明思路及代码
如下代码链接
感觉这个代码更容易理解一些
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; int w[12000],v[12000]; double total[12000]; int n,k; bool deal(double num){ int i; double sum=0; for(i=0;i<n;i++){ total[i]=v[i]-num*w[i]; //printf("%lf ",total[i]); } //printf("\n"); sort(total,total+n); for(i=0;i<k;i++){ sum+=total[n-1-i]; //printf("%lf\n",sum); } if(sum>=0) return true; else return false; } double reach(double end){ int i; double l=0,r=end,mid; for(i=0;i<100;i++){ mid=(l+r)/2; //printf("%lf\n",mid); if(deal(mid)) l=mid; else r=mid; } return l; } int main(){ double max,temp; int i; while(~scanf("%d%d",&n,&k)){ max=0; for(i=0;i<n;i++){ scanf("%d %d",&w[i],&v[i]); temp=v[i]/w[i]; if(temp>max) max=temp; } printf("%.2lf\n",reach(max)); } return 0; }
相关文章推荐
- [POJ2342]Anniversary party(树dp)
- POJ 2286 The Rotation Game(IDA*)
- Boost::filesystem 使用小笔记
- awk的模式和动作
- python模块和包
- 给即将大三的自己一封信
- macosx 交叉编译 valgrind For Android
- 一个精简的实现RecyclerView可添加header和footer的Demo
- 387. First Unique Character in a String
- 细说JVM系列:虚拟机类加载机制
- codeforces 708B-Recover the String
- Linux驱动开发环境配置(内核源码树构造)
- STM32--CAN简单接收和发送
- linux缓冲区解析
- CentOS 6.5/6.6 安装mysql 5.7 最完整版教程
- 考勤信息(员工打卡)
- 自定义ViewPager设置是否可滑动
- struts.xml配置
- 旋转(Rotation)手势
- JS精确计算bug