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 }

 

目录
相关文章
|
9天前
|
人工智能 JSON 供应链
畅用7个月无影 JVS Claw |手把手教你把JVS改造成「科研与产业地理情报可视化大师」
LucianaiB分享零成本畅用JVS Claw教程(学生认证享7个月使用权),并开源GeoMind项目——将JVS改造为科研与产业地理情报可视化AI助手,支持飞书文档解析、地理编码与腾讯地图可视化,助力产业关系图谱构建。
23434 9
畅用7个月无影 JVS Claw |手把手教你把JVS改造成「科研与产业地理情报可视化大师」
|
13天前
|
人工智能 缓存 BI
Claude Code + DeepSeek V4-Pro 真实评测:除了贵,没别的毛病
JeecgBoot AI专题研究 把 Claude Code 接入 DeepSeek V4Pro,跑完 Skills —— OA 审批、大屏、报表、部署 5 大实战场景后的真实体验 ![](https://oscimg.oschina.net/oscnet/up608d34aeb6bafc47f
4505 15
Claude Code + DeepSeek V4-Pro 真实评测:除了贵,没别的毛病
|
14天前
|
人工智能 JSON BI
DeepSeek V4 来了!超越 Claude Sonnet 4.5,赶紧对接 Claude Code 体验一把
JeecgBoot AI专题研究 把 Claude Code 接入 DeepSeek V4Pro 的真实体验与避坑记录 本文记录我将 Claude Code 对接 DeepSeek 最新模型(V4Pro)后的真实体验,测试了 Skills 自动化查询和积木报表 AI 建表两个场景——有惊喜,也踩
5423 13
|
1月前
|
人工智能 自然语言处理 安全
Claude Code 全攻略:命令大全 + 实战工作流(建议收藏)
本文介绍了Claude Code终端AI助手的使用指南,主要内容包括:1)常用命令如版本查看、项目启动和更新;2)三种工作模式切换及界面说明;3)核心功能指令速查表,包含初始化、压缩对话、清除历史等操作;4)详细解析了/init、/help、/clear、/compact、/memory等关键命令的使用场景和语法。文章通过丰富的界面截图和场景示例,帮助开发者快速掌握如何通过命令行和交互界面高效使用Claude Code进行项目开发,特别强调了CLAUDE.md文件作为项目知识库的核心作用。
24157 65
Claude Code 全攻略:命令大全 + 实战工作流(建议收藏)