您的位置:首页 > 其它

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: