博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ-3111 K Best---二分求最大化平均值
阅读量:6038 次
发布时间:2019-06-20

本文共 1327 字,大约阅读时间需要 4 分钟。

题目链接:

题目大意:

卖宝救夫:Demy要卖珠宝,n件分别价值vi 重 wi,她希望保留k件使得

最大。

解题思路:

1 #include
2 #include
3 #include
4 #include
5 using namespace std; 6 const int INF = 1e7; 7 const int maxn = 100005; 8 int n, m; 9 double w[maxn], v[maxn], y[maxn];10 bool judge(double x)11 {12 for(int i = 1; i <= n; i++)13 y[i] = v[i] - x * w[i];14 sort(y + 1, y + n + 1);15 16 double sum = 0;17 for(int i = 1, j = n; i <= m; i++, j--)18 sum += y[j];19 return sum >= 0;20 }21 struct node22 {23 double x;24 int id;25 bool operator <(const node& a)const26 {27 return x > a.x;28 }29 }ans[maxn];30 int main()31 {32 cin >> n >> m;33 for(int i = 1; i <= n; i++)34 cin >> v[i] >> w[i];35 double l = 0, r = INF;36 for(int i = 0; i < 50; i++)37 {38 double mid = (l + r) / 2;39 if(judge(mid))l = mid;40 else r = mid;41 }42 for(int i = 1; i <= n; i++)43 {44 ans[i].id = i;45 ans[i].x = v[i] - l * w[i];46 }47 sort(ans + 1, ans + n + 1);48 printf("%d", ans[1].id);49 for(int i = 2; i <= m; i++)50 {51 printf(" %d", ans[i].id);52 }53 puts("");54 return 0;55 }

 

转载于:https://www.cnblogs.com/fzl194/p/8989526.html

你可能感兴趣的文章
浙江大学PAT上机题解析之1015. 德才论 (25)
查看>>
Lintcode: First Bad Version
查看>>
WebAPI2使用AutoFac依赖注入完整解决方案。
查看>>
codeblocks中cocos2dx项目添加新的.cpp和.h文件后编译运行的方法
查看>>
二分查找的平均查找长度详解【转】
查看>>
No space left on device错误解决
查看>>
从npm 角度理解 mvn 的 pom.xml
查看>>
技术花絮
查看>>
责任心与态度比技术更重要
查看>>
贪婪与非贪婪模式
查看>>
OLTP与OLAP介绍
查看>>
hdu 4707 Pet 2013年ICPC热身赛A题 dfs水题
查看>>
分享几个linux系统版本的查看命令
查看>>
php调试工具总结
查看>>
iOS: Sorted Array with Compare
查看>>
Openstack配置文件管理的变迁之路
查看>>
安装好centOS5.5 后中文乱码
查看>>
java基础---->Zip压缩的使用(转)
查看>>
iOS 自定义NavigationBar右侧按钮rightBarButtonItem--button
查看>>
IOS--- NavigationBar标题按钮
查看>>