博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU-Fish买电脑 二分查找
阅读量:6812 次
发布时间:2019-06-26

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

这题可以用二分枚举答案来求解,每次枚举一个答案时我们总是选取满足要求的每个零件的价格最小者,如果金钱能够满足的话就枚举一个更大的质量,这里最好将质量离散化,这样就能枚举每个点都用相应的品质对应。

代码如下:

#include 
#include
#include
#include
#include
using namespace std;map
mp;int fee[1005];struct Node{ char name[25], type[25]; int p, q; bool operator < (Node temp) const { return strcmp(name, temp.name) < 0; }}e[1005];struct Point{ int no, x; bool operator < (Point temp) const { return x < temp.x; } bool operator == (Point temp) const { return x == temp.x; }}p[1005];int N, M;bool Ac(int x){ int left = M, idx = -1; for (int i = 0; i <= 1000; ++i) { fee[i] = 1 << 30; } for (int i = 0; i < N; ++i) { if (i == 0) { ++idx; if (mp[e[i].q] >= x) { fee[idx] = min(fee[idx], e[i].p); } } else { if (strcmp(e[i].name, e[i-1].name) == 0) { if (mp[e[i].q] >= x) { fee[idx] = min(fee[idx], e[i].p); } } else { left -= fee[idx]; if (left < 0) { return false; } ++idx; if (mp[e[i].q] >= x) { fee[idx] = min(fee[idx], e[i].p); } } } } left -= fee[idx]; if (left < 0) { return false; } return true; }int bsearch(int l, int r){ int mid, ret = 0; while (l <= r) { mid = (l + r) >> 1; if (Ac(mid)) { ret = mid; l = mid + 1; } else { r = mid - 1; } } return ret;}int main(){ int cnt, ret; int T; scanf("%d", &T); while (T--) { scanf("%d %d", &N, &M); mp.clear(); for (int i = 0; i < N; ++i) { scanf("%s %s %d %d", e[i].name, e[i].type, &e[i].p, &e[i].q); p[i].x = e[i].q; } sort(e, e + N); sort(p, p + N); cnt = unique(p, p + N) - p; for (int i = 0; i < cnt; ++i) { mp[p[i].x] = i; } ret = bsearch(0, cnt-1); printf("%d\n", p[ bsearch(0, cnt-1) ].x); } return 0; }

转载于:https://www.cnblogs.com/Lyush/archive/2012/08/12/2635372.html

你可能感兴趣的文章
js-ES6学习笔记-变量的解构赋值
查看>>
Swing(Java)--维基百科
查看>>
中间人攻击——ARP欺骗的原理、实战及防御
查看>>
webpack入门
查看>>
shell实现除法,保留小数点后N位
查看>>
查看和改动MySQL数据库表存储引擎
查看>>
服务器路由配置--Route
查看>>
Linux下更换jdk和配置环境变量
查看>>
【shell】shell编程(二)-运算符
查看>>
DNS_PROBE_FINISHED_NXDOMAIN
查看>>
BZOJ5104 : Fib数列
查看>>
MySQL Replication 主从复制全方位解决方案
查看>>
Nginx+upstream针对后端服务器容错的运维笔记
查看>>
使用SQL_TRACE进行数据库诊断
查看>>
风控8-收码平台
查看>>
SQL Server 中心订阅模型(多发布单订阅)
查看>>
Vue父组件接收不到子组件$emit事件的原因分析
查看>>
工作总结的字体和格式要求
查看>>
CentOS 6.9永久设置静态路由表以及路由表常用设置
查看>>
解决Docker时区与主机时区不一致的问题
查看>>