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;
}


 

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

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

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

LA 3971 二分

直接二分搜品质因子 AC代码如下: #include #include #include #include #include #include #include using name...
  • hzh_0000
  • hzh_0000
  • 2014年05月21日 19:35
  • 378

LA 3971 Assemble / 二分

有n个物品 属性有明智 价格 名字(没用)种类  每种类型选一个 使总价格不超过b  并且最小品质最大 二分品质 #include #include #include #include #in...
  • u011686226
  • u011686226
  • 2013年12月08日 13:55
  • 999

LA 3971 组装电脑

给你b块钱去组装一台电脑。 给出n个配件各自的种类、品质因子和价格,要求每个类型配件各买一个,总价格不超过b,且“品质最差配件”的品质因子尽量大。(即最小的品质因子尽量大)分析: 1.解决“最小值...
  • lyqzzy
  • lyqzzy
  • 2017年02月14日 00:53
  • 149

二分+LA3971

Problem A - Assemble Time limit: 2 seconds Recently your team noticed that the computer you use to...
  • u010660276
  • u010660276
  • 2013年12月27日 13:46
  • 500

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

题目链接:UVA-LA 3971 题意:用不超过b的预算,购置电脑硬件,每种都需要购办一个,且要使品质最差的硬件的品质数最大。 题解:二分枚举,在每...
  • ADjky
  • ADjky
  • 2016年08月25日 15:04
  • 199

LA3971

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

LA3971组装电脑

题意:       你有b块钱,想要组装一台电脑,给你提供一些零件,每种零件提供一个或几个,组装电脑的前提是每种零件只能也必须选择一个,每种零件都有自己的种类,名字,价格,还有品质,要求是在能配成电...
  • u013761036
  • u013761036
  • 2014年11月21日 16:21
  • 510

LA 3971 Assemble 组装电脑

题意:给定电脑的n个配件,每个配件有类型,名字(没用的信息),价格和品质因子。要求每种类型的配件各买一个用于组装电脑,总价格不超过b元。求所有可能的方案中品质因子最差的那个配件的品质因子最大能是多少。...
  • FirstLucker
  • FirstLucker
  • 2015年07月04日 05:08
  • 422

组装电脑 LA 3971 二分答案

题目: 给定电脑的n(n
  • hjt_fathomless
  • hjt_fathomless
  • 2016年03月28日 22:37
  • 261
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:LA3971 - Assemble
举报原因:
原因补充:

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