LA3971 - Assemble

原创 2015年07月09日 21:36:46

Recently your team noticed that the computer you use to practice for programming contests is not
good enough anymore. Therefore, you decide to buy a new computer.
To make the ideal computer for your needs, you decide to buy separate components and assemble
the computer yourself. You need to buy exactly one of each type of component.
The problem is which components to buy. As you all know, the quality of a computer is equal to
the quality of its weakest component. Therefore, you want to maximize the quality of the component
with the lowest quality, while not exceeding your budget.
Input
On the rst line one positive number: the number of testcases, at most 100. After that per testcase:
• One line with two integers: 1 n 1000, the number of available components and 1 b
1000000000, your budget.
• n lines in the following format: `type name price quality', where type is a string with the type
of the component, name is a string with the unique name of the component, price is an integer
(0 price 1000000) which represents the price of the component and quality is an integer
(0 quality 1000000000) which represents the quality of the component (higher is better). The
strings contain only letters, digits and underscores and have a maximal length of 20 characters.
It will always possible to construct a computer with your budget.
Output
Per testcase:
• One line with one integer: the maximal possible quality.
Sample Input
1
18 800
processor 3500_MHz 66 5
processor 4200_MHz 103 7
processor 5000_MHz 156 9
processor 6000_MHz 219 12
memory 1_GB 35 3
memory 2_GB 88 6
memory 4_GB 170 12
mainbord all_onboard 52 10
harddisk 250_GB 54 10
harddisk 500_FB 99 12
casing midi 36 10
monitor 17_inch 157 5
monitor 19_inch 175 7
monitor 20_inch 210 9
monitor 22_inch 293 12
mouse cordless_optical 18 12
mouse microsoft 30 9
keyboard office 4 10
Sample Output
9

#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <map>
using namespace std;
const int MAX = 1000000010;
const int MAXN = 1100;
struct node{
    int id;
    int price;
    int val;
}WuPing[MAXN];
bool cmp(node a, node b)
{
    return a.val>b.val;
}
int n, money;
map<string,int>mID;
int id;
int sc[MAXN];
bool check(int mid)
{
    int i;
    for(i=1; i<id; i++) sc[i] = MAX;
    for(i=0; i<n; i++)
    {
        if(WuPing[i].val < mid)break;
        int x = WuPing[i].id;
        sc[x] = min(sc[x],WuPing[i].price);
    }
    long long s = money;
    for(i=1; i<id; i++)
    {
        if(sc[i]==MAX)return false;
        s-=sc[i];
    }
    return s>=0;
}
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d %d",&n,&money);
        mID.clear();
        id = 1; 
        char Lei[50], Name[50];
        int p, v, i;
        for(i=0; i<n; i++)
        {
            scanf("%s%s%d%d",Lei,Name,&p,&v);
            if(mID[Lei])
            {
                WuPing[i].id = mID[Lei];
            }else{
                WuPing[i].id = id;
                mID[Lei] = id++;
            }
            WuPing[i].price = p;
            WuPing[i].val = v;
        }
        sort(WuPing,WuPing+n,cmp);
        int max1 = MAX, min1 = -1, mid;
        while(max1>min1+1)
        {
            mid = (max1+min1)/2;
            
            if(check(mid))
            {
                min1 = mid;
            }else{
                max1 = mid;
            }
        } 
        printf("%d\n",min1);
    }
    return 0;
}


 

版权声明:本文为博主原创文章,未经博主允许不得转载。

组装电脑(Assemble,NWERC 2007,LA 3971)

组装电脑(Assemble,NWERC 2007,LA 3971)

LA3971-Assemble(贪心+二分)

题目链接:http://acm.hust.edu.cn/vjudge/problem/13338思路:使最小值最大,只需要对目标进行二分,并且judge一下是否合法,在judge函数里面,用贪心思想,...
  • Lzedo
  • Lzedo
  • 2016年08月16日 10:20
  • 93

UVa Live Archive 3971 & UVa 12124 & POJ 3497 - Assemble

传送门UVa Live Archive 3971 & UVa 12124 & POJ 3497 - Assemble

UVALive 3971 Assemble

刘汝佳大神书上的题目,思路是从大到小枚举最小价值的最大值,假设当前枚举到的...

UVALive 3971-Assemble- 最小值最大化(二分)

题意:你有b元钱,想要组装一台电脑,给出n个配件各自的种类、品质银子和价格,要求每种类型的配件各买一个,总价格不超过b,且“品质最差配件”的品质因子应该尽量大 二分 品质因子  每...
  • viphong
  • viphong
  • 2015年11月02日 18:04
  • 339

UVALive 3971 Assemble 电脑配件 二分+贪心

题意:某人想组装电脑,有很多电脑配件可以选,每样都有它的价格和质量,每种配件一定要买一个,现在给出钱数,求能组装出来的电脑里面配件质量最便宜的是多少。当然不能超出预算的啦。 每次枚举那个最便宜的,然...
  • hcbbt
  • hcbbt
  • 2013年09月10日 00:21
  • 1365

hdu 2333Assemble(uvaoj 3971)贪心

hdu 2333Assemble
  • gwq5210
  • gwq5210
  • 2014年10月11日 00:40
  • 403

二分+判断,最小值最大(组装电脑,LA 3971)

一开始啊,用map和priority_queue搞来搞去,各种upper_bound啊,维护单调啊什么鬼的,编码又麻烦,速度也不快,还WA。 具体就是先把所有的部件都买一个最便宜的,然后放到优先队列...

LA3971

Problem: Assemble Descripiton: 一个人要买一些零件组装一部电脑,现在有很多不同种类的不同类型的零件供他选择。问你在不超预算的情况下买到品质最优的电脑是多少?(电脑的品质...

UVA-LA 3971 组装电脑 二分枚举

题目链接:UVA-LA 3971 题意:用不超过b的预算,购置电脑硬件,每种都需要购办一个,且要使品质最差的硬件的品质数最大。 题解:二分枚举,在每...
  • ADjky
  • ADjky
  • 2016年08月25日 15:04
  • 159
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:LA3971 - Assemble
举报原因:
原因补充:

(最多只允许输入30个字)