uvalive3971Assemble

简介: 题意:你有b元钱,想要组装一台电脑,给出n个配件的各自的种类、品质因子和价格,要求每种类型的派件各买一个,总价格不超过b,且“品质最差配件”的品质因子应该尽量大 (题目保证有解),输出配件最小品质因子的最大值 分析:既然题目保证有解,那么每种配件都选品质最差的是一个极端,每种都选品质最好有是一个极端,在两个极端之间二分就可以得到答案。

题意:你有b元钱,想要组装一台电脑,给出n个配件的各自的种类、品质因子和价格,要求每种类型的派件各买一个,总价格不超过b,且“品质最差配件”的品质因子应该尽量大 (题目保证有解),输出配件最小品质因子的最大值

分析:既然题目保证有解,那么每种配件都选品质最差的是一个极端,每种都选品质最好有是一个极端,在两个极端之间二分就可以得到答案。

 1 #pragma warning(disable:4786)
 2 #include <stdio.h>
 3 #include <iostream>
 4 #include <string>
 5 #include <vector>
 6 #include <map>
 7 #define zzz
 8 using namespace std;
 9 int min(int a, int b){
10     return a<b?a:b;
11 }
12 int max(int a, int b){
13     return a>b?a:b;
14 }
15 const int MAXN = 1000 + 5;
16 int cnt;
17 map<string, int>id;
18 int ID(string s){
19     if(!id.count(s)) id[s]=cnt++;
20     return id[s];
21 }
22 struct ZZ{
23     int p, q;
24 };
25 vector<ZZ>zz[MAXN];
26 int b, n;
27 bool erfen(int q){
28     int sum = 0;
29     for(int i=0; i<cnt; i++){
30         int bargin = b + 1;
31         int m = zz[i].size();
32         for(int j=0; j<m; j++){
33             if(zz[i][j].q>=q) bargin = min(bargin, zz[i][j].p);
34         }
35         if(bargin == b+1) return false;
36         sum += bargin;
37         if(sum>b) return false;
38     }
39     return true;
40 }
41 int main(){
42 #ifndef zzz
43     freopen("in.txt", "r", stdin);
44 #endif
45     int cas;
46     scanf("%d", &cas);
47     while(cas--){
48         scanf("%d%d", &n, &b);
49         cnt = 0;
50         int i;
51         for(i=0; i<n; i++) zz[i].clear();
52         id.clear();
53         int maxq = 0;
54         for(i=0; i<n; i++){
55             char type[30], name[30];
56             int p, q;
57             scanf("%s%s%d%d", type, name, &p, &q);
58             maxq = max(maxq, q);
59             ZZ tmp;
60             tmp.p = p;
61             tmp.q = q;
62             zz[ID(type)].push_back(tmp);
63         }
64         int l = 0;
65         int r = maxq;
66         while(l<r){
67             int m = (l+r+1)/2;
68             if(erfen(m)) l = m;
69             else r = m - 1;
70         }
71         printf("%d\n", l);
72     }
73     return 0;
74 }

 

目录
相关文章
|
SQL Java 数据库连接
Mybatis中强大的resultMap
Mybatis中强大的resultMap
620 0
|
计算机视觉
OpenCV-计算轮廓周长cv::arcLength
OpenCV-计算轮廓周长cv::arcLength
539 0
|
移动开发 自然语言处理 Linux
Python中r前缀:原始字符串的魔法解析
本文深入解析Python中字符串的r前缀(原始字符串)的设计原理与应用场景。首先分析传统字符串转义机制的局限性,如“反斜杠地狱”问题;接着阐述原始字符串的工作机制,包括语法定义、与三引号结合的用法及特殊场景处理。文章重点探讨其在正则表达式、文件路径和多语言文本处理中的核心应用,并分享动态构建、混合模式编程等进阶技巧。同时纠正常见误区,展望未来改进方向,帮助开发者更好地理解和使用这一特性,提升代码可读性和维护性。
824 0
|
缓存 测试技术 Apache
告别卡顿!Python性能测试实战教程,JMeter&Locust带你秒懂性能优化💡
告别卡顿!Python性能测试实战教程,JMeter&Locust带你秒懂性能优化💡
786 1
|
移动开发 小程序 JavaScript
uniapp中uview组件库丰富的Slider 滑动选择器的使用方法
uniapp中uview组件库丰富的Slider 滑动选择器的使用方法
1871 1
|
缓存 小程序 API
【社区每周】新增保存文件到系统储存空间API;小程序开发体验问卷调研发布
【社区每周】新增保存文件到系统储存空间API;小程序开发体验问卷调研发布
231 11
|
搜索推荐
通过curl 来对比http状态码301和302
通过curl 来对比http状态码301和302
888 0
|
算法
背包问题系列之 0-1 背包问题
背包问题系列之 0-1 背包问题
388 0
|
存储 缓存 文件存储
如何保证分布式文件系统的数据一致性
分布式文件系统需要向上层应用提供透明的客户端缓存,从而缓解网络延时现象,更好地支持客户端性能水平扩展,同时也降低对文件服务器的访问压力。当考虑客户端缓存的时候,由于在客户端上引入了多个本地数据副本(Replica),就相应地需要提供客户端对数据访问的全局数据一致性。
33256 202
如何保证分布式文件系统的数据一致性

热门文章

最新文章