LA3971 组装电脑

题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1972

题意:

有 b 块钱, n个配件,配件有 种类,名字,价格,和品质。要求每一类都要有,价格总和不能超过 b,最后要求最低的品质的那个配件的品质要最高。

分析:

二分。

二分品质x,低于 x 的筛掉,高于等于 x 的,选一个最便宜的。

处理好每种配件,插到vector中,输入麻烦一点。

 1 #include <bits/stdc++.h>
 2
 3 using namespace std;
 4
 5 const int maxn = 1000 + 5;
 6 const int inf = 0x3f3f3f3f;
 7 int n,b;
 8
 9 struct Component {
10     int price;
11     int quality;
12 };
13
14 vector<Component> comp[maxn];
15
16 int cnt;
17 map<string,int> id;
18 int ID(string s) {
19     if(!id.count(s))
20         id[s] = cnt++;
21     return id[s];
22 }
23
24 bool ok(int q)
25 {
26     int sum = 0;
27     for(int i=0;i<cnt;i++) {
28         int m = comp[i].size();
29         int cheap = inf;
30         for(int j=0;j<m;j++) {
31             if(comp[i][j].quality>=q)
32                 cheap = min(cheap,comp[i][j].price);
33         }
34         if(cheap==inf) return false;
35         sum+=cheap;
36         if(sum>b) return false;
37     }
38     return true;
39 }
40
41 int main()
42 {
43     int t;
44     scanf("%d",&t);
45     while(t--) {
46         cnt = 0;
47         int maxq = 0;
48         scanf("%d%d",&n,&b);
49         for(int i=0;i<n;i++) {
50             comp[i].clear();
51         }
52
53         for(int i=0;i<n;i++) {
54             char type[30],name[30];
55             int p,q;
56             scanf("%s%s%d%d",type,name,&p,&q);
57             maxq = max(maxq,q);
58             comp[ID(type)].push_back((Component){p,q});
59         }
60
61         int L = 0,R=maxq+1;
62         while(L<R) {
63             int M = L + (R-L+1)/2;
64             if(ok(M))
65                 L = M;
66             else R = M - 1;
67         }
68         printf("%d\n",L);
69     }
70     return 0;
71 }

时间: 2024-10-24 22:02:07

LA3971 组装电脑的相关文章

利用接口“组装电脑”

CPU接口: 1 public interface ICPU { 2 3 //性能 4 public void XingNeng(); 5 6 //型号 7 public void XingHao(); 8 9 //生产厂家 10 public void ShengChan(); 11 } 1 public interface ICPU1 { 2 3 //性能 4 public void XingNeng1(); 5 6 //型号 7 public void XingHao1(); 8 9 //

intel和AMD CPU性能对比(2016年CPU天梯图)组装电脑必读!

http://www.365pcbuy.com/article-411.html 特别提示:此文已经于2016年10月12日更新!内容变动较大,请细细品鉴! 如何为客户推荐高性价比机型是我站的重要工作.极速站长-pc小虫从1995年2月安装自己第一台386DX/40电脑以来,21年来一直从事电脑软硬件工作,经历了整个家用电脑的发展历程,接触过上万台不同配置机器,精通各类电脑硬件.精通多种软件.服务器配置,拥有专利产品一项,热心传授知识.2003年pc小虫开办了成都第一个无盘网络培训班,2005年

建造者模式(Builder)——从组装电脑开始

建造者模式(Builder)--从组装电脑开始 建造者模式概括起来就是将不同独立的组件按照一定的条件组合起来构成一个相对业务完整的对象.调用者无需知道构造的过程. 我们从组装电脑开始 让我们从买组装电脑开始吧. 首先要买一个电脑,一般都有两个选择 -- 品牌电脑和组装电脑,一般人为了省事和放心都会选择买品牌电脑(也就是整机).在这里,为了更好的分析问题,假定我们为了性价比决定要买组装电脑.那么我们该怎么做呢. 首先我们得学习一个完整的电脑的组成部分有哪些? 经过翻查一部分资料发现,主要部件分为主

LA 3971 组装电脑(二分)

https://vjudge.net/problem/UVALive-3971 题意:你有b块钱,想要组装一台电脑.给出n个配件各自的种类.品质因子和价格,要求每种类型的配件各买一个,总价格不超过b,且“品质最差配件”的品质因子应尽量大. 思路: 最小值最大,很明显要二分. 那么怎么判断这个品质因子下钱是够用的呢? 对于每个类型的配件来说,买最便宜的复合品质因子的配件,如果这样都大于b,那就得减小品质因子了. 1 #include<iostream> 2 #include<algorit

OC 复合 组装电脑

键盘类 #import <Foundation/Foundation.h> @interface Keyboard : NSObject @property(strong,nonatomic)NSString *brand; @end #import "Keyboard.h" @implementation Keyboard - (NSString *)description { return [NSString stringWithFormat:@"%@&quo

重装组装电脑后只剩下一个盘别的盘的资料怎样恢复

问题描述:重装系统分区合并是因为在重新安装系统时,选择了错误的选项导致把整个硬盘当成C盘来装,装完之后自然就只剩下C盘.想要恢复丢失盘的资料,需要注意,别往现在的这个C盘存入新的文件(因为现在存入的文件可能会覆盖原先DEF盘的资料).可以把硬盘拆下来挂到别的电脑当从盘或者接个移动硬盘,把数据恢复到移动硬盘里.具体的恢复方法看下文了解.工具/软件:极限数据恢复软件 步骤1:先下载并解压软件打开后,直接双击需要恢复的磁盘步骤2:等待软件扫描完毕一般需要几分钟到半个小时.步骤3:程序会很快将扫描到的文

UVALive 3971 组装电脑

https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1972 http://7xjob4.com1.z0.glb.clouddn.com/df5832a56667ea3317ca9166994f1eb6 题意:给电脑配件,价格和性能,求在指定总价内配件的最低性能最大. 思路:用二分方法,找出性能,使这个性能以上的配件能在指定价格内

组装电脑扩容C盘后盘符不见的文件怎样寻回

盘符丢失是比较常见的数据恢复案例,需要注意,盘符丢失后不要再重建新的分区.保护好文件丢失现场,可以最大程度的恢复出文件.具体的恢复方法看正文了解. 工具/软件:流星数据恢复软件 步骤1:先百度搜索并下载软件运行后,直接双击需要恢复的分区,接着解压再右击软件图标选择<以管理员身份运行>软件. 步骤2:程序运行后,直接双击需要恢复数据的物理盘. 步骤3:等软件扫描完毕平均需要几分钟到半个小时. 步骤4:程序找到资料后,放到<恢复的分区>目录中. 步骤5:勾选所有需要恢复的文件,右击选择

怎么找回win10组装电脑调整分区后盘符丢失的数据

盘符误删是比较常见的数据恢复案例,需要注意,盘符误删后不要再重建新的分区.保护好数据丢失现场,可以最大程度的恢复出数据.具体的恢复方法看正文了解. 工具/软件:AuroraDataRecovery 步骤1:先下载并解压程序运行后,直接双击需要恢复的分区,然后右击软件图标选择<以管理员身份运行>(如果是xp系统可以直接双击打开软件). 步骤2:程序打开后,直接双击需要恢复资料的物理盘. 步骤3:等程序扫描完毕一般需要几分钟到半个小时,稍微耐心等下即可. 步骤4:程序会很快将找到的文件,放到<