[2016-03-19][UVALive][3971][Assemble]

  • 时间:2016-03-19 13:55:17 星期六

  • 题目编号:[2016-03-19][UVALive][3971][Assemble]

  • 题目大意:给定若干个电脑零件的价格和质量,求在总价不超过b的情况下,品质最差的配件的质量尽可能大

  • 分析:二分

  1. #include <vector>
  2. #include <map>
  3. #include <algorithm>
  4. #include <string>
  5. #include <cstring>
  6. #include <cstdio>
  7. using namespace std;
  8. typedef long long LL;
  9. #define CLR(x,y) memset((x),(y),sizeof((x)))
  10. #define CLR2(x,y,mtype,mcnt) memset((x),(y),sizeof((mtype))*(mcnt))
  11. #define FOR(x,y,z) for(int (x)=(y);(x)<(z);++(x))
  12. #define FORD(x,y,z) for(int (x)=(y);(x)>=(z);--(x))
  13. const int maxn = 1000 + 100;
  14. struct Com{
  15. int price,quality;
  16. Com(int p = 0,int q = 0):price(p),quality(q){}
  17. };
  18. vector<Com> comp[maxn];
  19. map<string,int> id;
  20. int t,n,b,p,q,maxq,cnt;
  21. int ID(string str){
  22. if(id.count(str)) return id[str];
  23. else id[str] = cnt;
  24. return cnt++;
  25. }
  26. int ok(int q){
  27. int sum = 0;
  28. FOR(i,0,cnt){
  29. int chepest = b + 1;
  30. int m = comp[i].size();
  31. FOR(j,0,m){
  32. if(comp[i][j].quality >= q && comp[i][j].price < chepest)
  33. chepest = comp[i][j].price;
  34. }
  35. sum += chepest;
  36. if(sum > b) return 0;
  37. }
  38. return 1;
  39. }
  40. int main(){
  41. char type[30];
  42. scanf("%d",&t);
  43. while(t--){
  44. scanf("%d%d",&n,&b);
  45. cnt = 0;
  46. FOR(i,0,n) comp[i].clear();
  47. id.clear();
  48. maxq = 0;
  49. FOR(i,0,n){
  50. scanf("%s %*s %d %d",type,&p,&q);
  51. if(q > maxq) maxq = q;
  52. comp[ID(type)].push_back( Com(p,q) );
  53. }
  54. int l = 0,r = maxq,mid;
  55. while(l < r){
  56. mid = l + (r - l + 1)/2;
  57. if(ok(mid)) l = mid;
  58. else r = mid - 1;
  59. }
  60. printf("%d\n",l);
  61. }
  62. return 0;
  63. }

来自为知笔记(Wiz)

时间: 2024-10-14 05:07:38

[2016-03-19][UVALive][3971][Assemble]的相关文章

UVA 12124 UVAlive 3971 Assemble(二分 + 贪心)

先从中找出性能最好的那个数, 在用钱比较少的去组合,能组出来就表明答案在mid的右边,反之在左边, #include<string.h> #include<map> #include<stdio.h> #include<iostream> #include<algorithm> using namespace std; map<string,int> vic;//以字符映射数字 int end,start; int num; int

UVALive 3971 Assemble(模拟 + 二分)

UVALive 3971 题意:有b块钱,想要组装一台电脑,给出n个配件的种类,名字,价格,品质因子.若各种类配件各买一个,总价格<=b,求最差品质配件的最大品质因子. 思路: 求最大的最小值一般用二分法. 在(0,maxq)内进行二分,判定q作为最差品质因子是否可行. 大白书原题,比较考验代码功底. code: /* * @author Novicer * language : C++/C */ #include<iostream> #include<sstream> #i

uvalive 3971 Assemble

https://vjudge.net/problem/UVALive-3971 题意: 现在你要组装一台电脑,每个电脑的一种类型的配件都有多种选择,它们的名字是不同的. 现在给出已有的元件,每种类型都至少有一个元件.你有已知的预算,要求你找出以不超过预算的钱,每种类型的元件恰好选择一个,最低质量的元件的质量要尽量高,输出这个最高值. 思路: 从题意的叙述来看,最大化最小值,那么肯定是选用二分. 二分选择的量应该是质量. 接下来证明花费的钱是随着质量非递减的. 设当前的最小质量为x,那么把所有元件

UVALive 3971 Assemble(二分+贪心)

本题思路不难,但是要快速准确的AC有点儿考验代码功力. 看了大白书上的标程,大有所获. 用map和vector的结合给输入分组,这个数据结构的使用非常精美,恰到好处. #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<string> #include<cmath> #include<map> #include&l

Murano Weekly Meeting 2016.07.19

Meeting time: 2016.July.19 1:00~2:00 Chairperson:  Kirill Zaitsev, from Mirantis Meeting summary: 1.Backports Link:  https://etherpad.openstack.org/p/murano-stable-backports/ 2.Convergence so both of our CI servers are running heat with convergence n

2016.1.19 DEV Express控件GirdControl使用

DEV控件在工具箱中消失处理方法 开始-->程序-->Developer Express v2009 vol 3(依据版本不同)-->Components-->Tools-->ToolboxCreator   1.点击一行选择完整一行 Run Designer->View->OptionsBehavior->EditorShowMode 设置为:Click Run Designer->View->OptionsSelection.EnableAp

分布式技术一周技术动态 2016.03.20

分布式系统实践 1. 基于Mesos和Docker的分布式计算平台 https://mp.weixin.qq.com/s?__biz=MzAxMDgzOTA2Mw==&mid=402769128&idx=1&sn=cea3ad1357bd9312acf1768c0a493bfd&scene=1&srcid=0318BTuxT0fsFYwPjpeyuDOa&key=710a5d99946419d90fbc1e7600cce055b6e997d6afafc74c

翻译:Gregory Larsen,2016/02/19(第一版:2014年12月17日)高级T-SQL阶梯1级:使用CROSS JOIN介绍高级T-SQL

原文链接:http://www.sqlservercentral.com/articles/Stairway+Series/119933/ 原文作者:Gregory Larsen,2016/02/19(第一版:2014年12月17日) 系列 本文是"Stairway Series:Stairway to Advanced T-SQL"的一部分 这个阶梯将包含一系列文章,这些文章将在前面两个T-SQL阶梯,T-SQL DML和T-SQL超越基础知识的T-SQL基础上进行扩展. 这个楼梯应

uboot.2016.03 在mini2440上norfalsh启动

本人有点懒惰,直接在smdk2410的基础上进行修改 (note :红色字体表示修改内容,蓝色字体表示增加内容) 1. 顶层的makefile 在247行 添加如下两条语句 :   ARCH :=arm     CROSS_COMPILE :=arm-linux- 2 修改始终频率 打开 u-boot-2016.03/arch/arm/cpu/arm920t/start.S 第77行 #if defined(CONFIG_S3C2410) #if defined(CONFIG_S3C2440)