UVA12124 | Assemble (二分)
题目大意:给出你的预算和各类待选硬件来组装计算,同种类的硬件只需且必须选购一种,在保证预算足够的情况下求出最优的合计硬件质量。
根据木桶原理,合计硬件质量 = 所选购硬件中数值最低质量的硬件质量。
思路:很显然的二分答案模型,可以将最低质量二分答案后再用check函数判断该情况下是否满足预算要求,由于本题中N较小(<1000),所以可以直接枚举而不超时,当然亦可用贪心和数据结构优化。还有一个难点是同一类别的硬件的判断,我这里用了Map进行判断,再用vector存放同一类硬件的不同型号。
代码如下:
#include <cstdio>
#include <cstring>
#include <string>
#include <iostream>
#include <cstdlib>
#include <vector>
#include <map>
#define MAXN 1007
#define INF 0x3f3f3f3f
using namespace std;
int T,n,m,tot,ans;
map<string,int> M;
struct Point { int price,quality; };
vector<Point> item[MAXN];
inline bool check(int x)
{
int sum=0;
for (int i=1;i<=tot;i++) {
int fl=INF;
for (int j=0;j<(int)item[i].size();j++) {
if (item[i][j].quality>=x) fl=min(fl,item[i][j].price);
}
if (fl==INF) return false;
sum+=fl;
}
return sum<=m;
}
int main()
{
scanf("%d",&T);
while (T--) {
ans=tot=0,M.clear();
scanf("%d%d",&n,&m);
for (int i=1;i<=n;i++) {
string Type,Name; int p,q;
cin>>Type>>Name>>p>>q;
if (!M.count(Type)) M[Type]=++tot;
item[M[Type]].push_back((Point){p,q});
}
/* for (int i=1;i<=tot;i++) {
for (int j=0;j<(int)item[i].size();j++)
printf("%d %d\n",item[i][j].price,item[i][j].quality);
printf("\n\n");
} */
int left=0,right=1000000000,mid; //二分质量
while (left<=right) {
mid=left+(right-left)/2;
if (check(mid)) ans=mid,left=mid+1;
else right=mid-1;
}
printf("%d\n",ans);
for (int i=1;i<=tot;i++) item[i].clear();
}
return 0;
}
UVA12124 | Assemble (二分)的更多相关文章
- HDU 2333 Assemble(二分)
Assemble Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Su ...
- Uva 12124 Uva Live 3971 - Assemble 二分, 判断器, g++不用map.size() 难度:0
题目 https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_pr ...
- UVA 12124 UVAlive 3971 Assemble(二分 + 贪心)
先从中找出性能最好的那个数, 在用钱比較少的去组合,能组出来就表明答案在mid的右边,反之在左边, #include<string.h> #include<map> #incl ...
- 【二分答案+贪心】解决“最小值最大”问题(UVa 12124 - Assemble)
Problem A - Assemble Time limit: 2 seconds Recently your team noticed that the computer you use to p ...
- 【二分答案】 【POJ3497】 【Northwestern Europe 2007】 Assemble 组装电脑
Assemble Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 3171 Accepted: 1013 Descript ...
- UVA 12124 Assemble(二分答案)
题目链接:https://vjudge.net/problem/UVA-12124 垃圾vjudge毁我青春!! 首先这道题是解决“最小值最大”的问题,所以要二分答案. 在这里我们二分$quality ...
- LA 3971 (二分) Assemble
题意: 你有b块钱想要组装一台电脑.给出n个配件的种类,品质和价格,要求每个种类的配件各买一个总价格不超过b且“品质最差配件”的品质因子应尽量大. 这种情况下STL的map的确很好用,学习学习 这种最 ...
- UVALive 3971 Assemble(模拟 + 二分)
UVALive 3971 题意:有b块钱.想要组装一台电脑,给出n个配件的种类,名字,价格,品质因子.若各种类配件各买一个,总价格<=b,求最差品质配件的最大品质因子. 思路: 求最大的最小值一 ...
- UVALive 3971 Assemble(二分+贪心)
本题思路不难,但是要快速准确的AC有点儿考验代码功力. 看了大白书上的标程,大有所获. 用map和vector的结合给输入分组,这个数据结构的使用非常精美,恰到好处. #include<iost ...
随机推荐
- scrapy的useragent与代理ip
scrapy中的useragent与代理ip 方法一: user-agent我们可以直接在settings.py中更改,如下图,这样修改比较简单,但是并不推荐,更推荐的方法是修改使用scrapy的中间 ...
- electron 安装过程出现未成功地运行
问题 正文 产生问题得原因? 是因为之前安装了该程序,但是卸载的时候可能人为的直接删除了卸载程序. 这时候安装包会触发找到注册表中,该appid相同地址的卸载程序位置,然后进行调用,如果没有的话,只会 ...
- MySQL保存微信昵称中的特殊符号造成:(Incorrect string value: "xxxx'for column ‘name’ at row 1)异常
今天有业务员反应,编辑某个用户的信息的时候出现了异常,异常信息如下: Incorrect string value: "xFOx9Fx92x9D vxE6..'f or column 'na ...
- MySQL存储过程和游标
一.存储过程 什么是存储过程,为什么要使用存储过程以及如何使用存储过程,并且介绍创建和使用存储过程的基本语法. 什么是存储过程: 存储过程可以说是一个记录集,它是由一些T-SQL语句组成的代码块,这些 ...
- Python 编程入门(3):算术和表达式
以下所有例子都基于最新版本的 Python,为了便于消化,每一篇都尽量短小精悍,希望你能尽力去掌握 Python 编程的「概念」,可以的话去动手试一下这些例子(就算目前还没完全搞懂),加深理解. 计算 ...
- mysql必知必会--数 据 过 滤
如何组合 WHERE 子句以建立功能更强的更高级的搜索条件?如何使用 NOT 和 IN 操作符? 组合 WHERE 子句 第6章中介绍的所有 WHERE 子句在过滤数据时使用的都是单一的条 件.为了进 ...
- 8maven配置多个项目之间的依赖
首先创建两个项目进行测试依赖 创建一个HelloWorld2项目,一个HelloWorld类里面有一个sayHello的方法 然后再创建一个HelloWorldTime项目,一个SayHelloWor ...
- Html介绍,了解html与css关系
学习web前端开发至少需要掌握:html,css,javascript,那么这3门基础语言主要是用来实现什么的?1>html是网页内容的载体.内容就是网页制作者放在网页上想要让用户刘安的信息,比 ...
- Mybaits(10)N+1问题
N+1问题 从上面的例子日志中我们可以看到所有级联都成功了,但是引发了性能问题,例如我们在查询雇员的信息和工作任务信息,此时体检表和工牌信息就是多余,我们没必要查询一次.如果想日志体现的那样,取出了所 ...
- JN_0014:win10命令窗口以管理员方式启动
1,先打开命令窗口 2,固定到任务栏 3,右键任务栏图标 4,右键命令提示符, 5,选择以管理员方式启动.