LA 3971 (二分) Assemble
题意:
你有b块钱想要组装一台电脑。给出n个配件的种类,品质和价格,要求每个种类的配件各买一个总价格不超过b且“品质最差配件”的品质因子应尽量大。
这种情况下STL的map的确很好用,学习学习
这种最大值最小的问题可以用二分法,自己写的二分会死循环,学习一下别人的二分。
//#define LOCAL
#include <vector>
#include <cstdio>
#include <string>
#include <map>
using namespace std; int cnt; //组件的类型数
map<string, int> id; //将组件类型的名字与编号对应起来
int ID(string s) //求类型s的编号
{
if(!id.count(s)) id[s] = cnt++;
return id[s];
}
const int maxn = + ;
struct Component
{
int price;
int quality;
};
int n, b;
vector<Component> comp[maxn]; bool ok(int q)
{//品质不小于q的组件能否组成不超过b元的电脑
int sum = ;
for(int i = ; i < cnt; ++i)
{
int cheapest = b + , m = comp[i].size();
for(int j = ; j < m; ++j)
if(comp[i][j].quality >= q)
cheapest = min(cheapest, comp[i][j].price);
//选择品质因子不小于p的最便宜的配件
if(cheapest > b) return false;
sum += cheapest;
if(sum > b) return false;
}
return true;
} int main(void)
{
#ifdef LOCAL
freopen("3971in.txt", "r", stdin);
#endif int T;
scanf("%d", &T);
while(T--)
{
scanf("%d%d", &n, &b);
cnt = ;
for(int i = ; i < n; ++i) comp[i].clear();
id.clear(); int maxq = ;
for(int i = ; i < n; ++i)
{
char type[], name[];
int p, q;
scanf("%s%s%d%d", type, name, &p, &q);
maxq = max(maxq, q);
comp[ID(type)].push_back((Component) {p, q});
} int L = , R = maxq;
while(L < R)
{
int M = L + (R - L + ) / ;
if(ok(M))
L = M;
else
R = M - ;
}
printf("%d\n", L);
}
return ;
}
代码君
LA 3971 (二分) Assemble的更多相关文章
- LA 3971 Assemble(二分)
题目: 给你b元钱,让你组装一台电脑,有n个配件,属性有 种类 名字 价格 品质,每种类型选至少一个,并且最小品质最大.输出这个最大的最小品质. 白书上说了,最小值最大的问题一般是二分来求解答案.在这 ...
- LA 3971 组装电脑(二分)
https://vjudge.net/problem/UVALive-3971 题意:你有b块钱,想要组装一台电脑.给出n个配件各自的种类.品质因子和价格,要求每种类型的配件各买一个,总价格不超过b, ...
- LA 4725 (二分) Airport
题意: 有W.E两个跑道,在每个时刻每个跑道的飞机都从0开始编号,而且每个时刻都有Wi和Ei架飞机到达这两个跑道.而且每个时刻只能选择一个跑道的一架飞机起飞.问如何选择才能使得飞机的最大编号最小.(每 ...
- UVALive 3971 Assemble(模拟 + 二分)
UVALive 3971 题意:有b块钱.想要组装一台电脑,给出n个配件的种类,名字,价格,品质因子.若各种类配件各买一个,总价格<=b,求最差品质配件的最大品质因子. 思路: 求最大的最小值一 ...
- UVALive 3971 Assemble(二分+贪心)
本题思路不难,但是要快速准确的AC有点儿考验代码功力. 看了大白书上的标程,大有所获. 用map和vector的结合给输入分组,这个数据结构的使用非常精美,恰到好处. #include<iost ...
- UVaLive 3971 Assemble (水题二分+贪心)
题意:你有b元钱,有n个配件,每个配件有各类,品质因子,价格,要每种买一个,让最差的品质因子尽量大. 析:很简单的一个二分题,二分品质因子即可,每次计算要花的钱的多少,每次尽量买便宜且大的品质因子. ...
- 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 ...
随机推荐
- ASP.NET用户控件事件的定义和实践
假定用户控件(UserControl.ascx)中包含按钮控件 AButton,希望实现按 Button 按钮时,包含该用户控件的页面可以接收到事件. UserControl.ascx.cs ...
- 国内银行CNAPS CODE 查询
原地址:http://weekend.blog.163.com/blog/static/746895820127961346724/ 全国各地,无论哪个银行,无论什么分行,所有的CNAPS CODE都 ...
- C# 使用 AutoResetEvent 或 ManualResetEvent 同步两个线程
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- POJ 2992 Divisors (求因子个数)
题意:给n和k,求组合C(n,k)的因子个数. 这道题,若一开始先预处理出C[i][j]的大小,再按普通方法枚举2~sqrt(C[i][j])来求解对应的因子个数,会TLE.所以得用别的方法. 在说方 ...
- HDU 2955 Robberies (01背包,思路要转换一下,推荐!)
题意: 小A要去抢劫银行,但是抢银行是有风险的,因此给出一个float值P,当被抓的概率<=p,他妈妈才让他去冒险. 给出一个n,接下来n行,分别给出一个Mj和Pj,表示第j个银行所拥有的钱,以 ...
- 使用MbrFix.exe修复MBR分区表
在卸载linux Ubuntu之前,先修复MBR,然后再删除Linux分区就可以了.而MbrFix.exe 就是这样一个Windows 修复MBR的应用程序软件,MbrFix.exe 不仅支持Wind ...
- 2013 ACM/ICPC Asia Regional Changsha Online G Goldbach
比赛的时候,被题目误导了,题目最后说结果可能很大,要取模,那时就想直接求会TLE的!!! 赛后才知道,坑啊………… 代码如下: #include<iostream> #include< ...
- SQL Server 基础 之 GROUP BY子句
GROUP BY 子句用于聚合信息 先看个实例,没有使用 GROUP BY 子句 SELECT SalesOrderID,OrderQty FROM Sales.SalesOrderDetail WH ...
- js中的call与apply
看js权威指南里面关于call与apply方法的说明:我们可以将call()与apply()看作是某个对象的方法,通过调用方法的形式来间接调用函数.这样的解释未免使人糊涂啊.下面说一下自己的见解:其实 ...
- C# 使用WIN32API设置外部程序窗口无边框
使用代码 var wnd = win32.FindWindowA(null, "窗口标题"); Int32 wndStyle = win32.GetWindowLong(wnd, ...