【Yougth的最大化 914 二分搜索+ 贪心】
来源:互联网 发布:淘宝怎么上架产品 编辑:程序博客网 时间:2024/06/06 19:35
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=914
这道题目是一道0-1分数规划求最优值。
方法是一个二分搜索+贪心的题目。
出这道题目就是告诉大家二分不仅可以查找,还可以搜索一个更优值。
要使得单位重量的价值最大,则其最大不超过单个中最大的单位重量的价值,最小当然不小于0.
那么我们就这一在0--最大单位重量的价值中间找一个值ans,使得ans为满足题目条件的最大值。如果满足条件,则可以找更大的。设置一个条件。既二分搜索、
从n个物品中找k个使得k个的价值和/质量和>=ans
为了使得ans尽可能的大,那么这里就要贪心选择。
#include<cstdio>#include<algorithm>using namespace std;double wi[10005],vi[10005],pi[10005];int n,k;bool cmp(double a,double b){ return a>b;}int check(double x){ for(int i=0;i<n;i++){//p[i] 代表的是 自己本省的价值-物品重量*最高单价 pi[i]=vi[i]-wi[i]*x; } double y=0; sort(pi,pi+n,cmp); //p[i] 由大到小排序。 for(int i=0;i<k;i++){ y+=pi[i]; } return y>=0;}double reach (double m){// 二分搜索 double l=0,r=m,mid; for(int i=0;i<100;i++){ mid=(r+l)/2; if(check(mid)) l=mid; else r=mid; } return l;}int main(){ while(~scanf("%d%d",&n,&k)){ double ma=0; for(int i=0;i<n;i++){ scanf("%lf%lf",&wi[i],&vi[i]); double ant=vi[i]/wi[i]; if(ant>ma) ma=ant;//选择出单价最高的。 } printf("%0.2lf\n",reach(ma)); }}
0 0
- 【Yougth的最大化 914 二分搜索+ 贪心】
- NYOJ 914 Yougth的最大化(二分搜索 + 贪心)
- nyoj 914 Yougth的最大化(贪心+二分搜索)
- NYOJ 914 Yougth的最大化 【贪心】+【二分】
- NYOJ 914题(贪心+二分搜索)Yougth的最大化 酒馆浪人的博客
- NYOJ 914 Yougth的最大化(贪心,二分)
- NYOJ 914 Yougth最大化(贪心+二分)
- nyoj Yougth的最大化 914 (二分搜索)
- NYOJ 914-Yougth的最大化(二分)
- NYOJ 586疯牛&NYOJ 914 Yougth的最大化 (二分+贪心)
- NYOJ 914 Yougth的最大化(二分法 + 贪心)
- nyoj--914--Yougth的最大化(二分查找)
- Yougth的最大化(二分法加贪心)
- nyoj914Yougth的最大化(二分搜索 + 贪心)
- NYOJ 914 Yougth的最大化
- NYOJ 914 Yougth的最大化
- nyoj-914 Yougth的最大化
- NYOJ - 914 Yougth的最大化
- 【CareerCup】 Linked Lists—Q2.5
- 【编码随笔】生成带lib的dll
- PL/SQL_触发器1(触发器简介)
- java实现图片验证码
- 背景建模SOBS
- 【Yougth的最大化 914 二分搜索+ 贪心】
- Ubuntu 13.10 安装使用搜狗拼音输入法
- JavaScript数字和字符串转换小结
- 【Android学习】Android服务之Service(4)--AIDLService
- 如何导出Java项目成为一个可以直接双击运行的jar文件的问题
- sql server 删除外键
- 实现ubnutn与window7共享:
- Linux给用户添加sudo权限
- linux第四课