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 ...
随机推荐
- Java的开发—面向对象的7大原则之开闭原则(一)
开闭原则(Open Close Principle) 一.定义: 软件中的(类.模块.函数等等)应该对于扩展是开放的,对于修改时关闭的.意味着一个实体允许在不改变它的源代码的前提变更它的行为 这里的软 ...
- [CSGO]跑图CFG
bot_kick //剔除所有电脑 sv_cheats 1 //允许作弊指令 bot_stop 1 //bot静止 mp_warmup_end //结束热身时间 mp_freezetime 0 //开 ...
- k8s~部署EFK框架
EFK,ELK都是目前最为流行的分布式日志框架,主要实现了日志的收集,存储,分析等,它可以与docker容器进行结合,来收集docker的控制台日志,就是stdout日志. elasticsearch ...
- java 入门如何设计类
2019/12/24 | 在校大二上学期 | 太原科技大学 初学java后,我们会发现java难点不在于Java语法难学,而是把我们挂在了如何设计类的“吊绳”上了.这恰恰也是小白 ...
- Android Binder实现浅析-Binder驱动
简介 Android是如何实现跨进程通信的,大家熟悉的Binder是什么,怎么设计的,进程间的数据如何发送接收的.本文将以及解析,并对Binder驱动实现.Native层实现.Java层实现三块做一个 ...
- SDMask(iOS蒙层遮罩弹出引导)
SDMask介绍 地址 针对iOS项目,大部分弹出视图三方都把弹出内容作为了项目的一部分,这种耦合局限性较大.该项目对此解耦,围绕我何时需要使用蒙层而展开设计.将弹出内容和动画和事件完全分离出去让co ...
- SQLyog12.08详细安装教程
SQLyog安装教程 一.软件下载 为了更好的学习,我们需要可视化界面,而不仅仅是通过命令行黑窗口管理数据库.SQLyog 就是一个快速而简洁的图形化管理MYSQL数据库的工具. SQLyog12.0 ...
- XOR and Favorite Number CodeForces - 617E
a[i]^a[i+1]--a[j]=k; 处理前缀和pre[i] 那么上式可以表示为pre[i-1]^pre[j]=k; #include<bits/stdc++.h> using nam ...
- 全文检索以及Lucene的应用
全文检索 一.什么是全文检索? 就是在检索数据,数据的分类: 在计算机当中,比如说存在磁盘的文本文档,HTML页面,Word文档等等...... 1.结构化数据 格式固定,长度固定,数据类型固定等等, ...
- Nuget打包没有注释显示
1.选中项目-->属性-->生成-->选中 XML文档文件(xml路径和该项目相同) 2.选择生成序列化程序集:自动/开