题目链接:点击这里

解题思路

此题题目描述的很简单,就是让我们用有限的预算找到最小品质因子最大的电脑组件,并且每种组件必须都要买。这种求“最小值最大”的常用方法就是二分:若猜想的答案为 x x x,则取所有品质因子大于x" role="presentation" style="position: relative;">xxx的组件进行组装,如果能不超过预算,则说明正确答案 >=x >= x >=x。因此,我们只需要枚举所有的品质因子,当第一个不满足题意的 x x x出现时,则解题结束。
但需要注意,此题有时间限制,因此必须使用二分法进行,时间复杂度为O(lgn)" role="presentation" style="position: relative;">O(lgn)O(lgn)O(lgn)。

代码实现

注意点

  1. 此题涉及到type,name,price,quality,比较复杂,可使用map进行hash,再给每个类型的组件一个vector,price和quality使用结构体进行存储。
  2. 需熟练使用map的各种函数。

待解决

  1. 在代码中已经表明,如果去掉if(cheapest == budget)这句话,则不能AC,显示为wrong answer,初步猜想是由于如果品质因子太大导致sum太大超出了int表示范围。
  2. 在代码中进行二分查找时,使用int middle = (right+left)/2则显示超时,为什么?
  3. 可将质量因子先排好序,再用二分查找进行枚举,可能会更快。

代码示例

#include <iostream>
#include <vector>
#include <map>
using namespace std;const int maxn  = 1000 + 10;
int cnt = 0;int  n; //预算和组件数目
int budget;struct Compont {int price;int quality;
};std::vector<Compont> comp[maxn]; //每一项都是vector的数组
std::map<string, int> ID;int convert(string type)
{if (!ID.count(type)){   //如果还没有这个类型的组件ID[type] = cnt++;}return ID[type];
}//看品质不小于q的组件是否能在预算范围内组装
bool judge(int q)
{int  sum = 0;for (int i = 0 ; i < cnt; i++){int cheapest = budget;int m = comp[i].size();for (int j = 0; j < m; j++){if (comp[i][j].quality >= q)cheapest = min(cheapest, comp[i][j].price);}sum += cheapest;//若没加这一句,则不能ACif(cheapest == budget)return false;if (sum > budget)return false;}return true;
}int main()
{int N;cin >> N;while (N--){cin >> n >> budget;cnt = 0;for (int i = 0 ; i < n ; i++){comp[i].clear();}ID.clear();int maxq = 0;for (int i  = 0 ; i < n; i++){string type, name;int p, q;cin >> type >> name >> p >> q;maxq = max(maxq, q);comp[convert(type)].push_back((Compont) {p, q});}//使用二分法来加快速度int left = 0,right = maxq;while (left < right){int middle = (right+left+1)/2 ;//int middle = (right+left)/2 ; 为什么不可以?if (judge(middle))left = middle;else{right = middle - 1;}}cout << left << endl;}return 0;
}

欢迎关注我的个人博客。

LA3871二分最大最小值相关推荐

  1. POJ_2456_Agressive_cows_(二分,最大化最小值)

    描述 http://poj.org/problem?id=2456 有n个小屋,线性排列在不同位置,m头牛,每头牛占据一个小屋,求最近的两头牛之间距离的最大值. Aggressive cows Tim ...

  2. 二分+最大化最小值 River Hopscotch POJ - 3258

    题意: 起始有两个石头,位置是000和nnn,在这中间有n个石头,问如何拿走m块石头后,使得他们之间的最小间隔的最大值. 题目: Every year the cows hold an event f ...

  3. 二分--求最小值的最大p1m2

    http://acm.hdu.edu.cn/showproblem.php?pid=6383 题意:中文题. 思路:求最小值的最大,一看就是二分.二分答案. #include<bits/stdc ...

  4. ARC 138 A - Larger Score「二分 + 后缀最小值」

    A - Larger Score 题目描述: 给定n个数,你可以交换任意相邻的两个数,使的原数组的前k个数字的和严格小于任意次交换后的前k个数字的和,问最小操作次数 思路: 其实就从[1,k]个数字中 ...

  5. poj 2456 Aggressive cows 【二分+最大化最小值】

    题目链接:http://poj.org/problem?id=2456 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 210 ...

  6. poj3104 Drying(二分最大化最小值 好题)

    https://vjudge.net/problem/POJ-3104 一开始思路不对,一直在想怎么贪心,或者套优先队列.. 其实是用二分法.感觉二分法求最值很常用啊,稍微有点思路的二分就是先推出公式 ...

  7. c语言二分答案最小值,C语言程序设计第2版课后习题答案(贾宗璞许合利人民邮电-第2版).doc...

    C语言程序设计第2版课后习题答案(贾宗璞许合利人民邮电-第2版) C语言习题答案 第1章 1.选择题 (1) C (2) B (3) 2.填空题 (1)main (2) main (3) 有穷性.确定 ...

  8. POJ 2455Secret Milking Machine(二分+网络流之最大流)

    题目地址:POJ2455 手残真浪费时间啊..又拖到了今天才找出了错误..每晚两道题不知不觉又变回了每晚一道题...sad.. 第一次在isap中忘记调用bfs,第二次则是遍历的时候竟然是从1開始遍历 ...

  9. NYOJ 5177 疯牛(最大化最小值 二分搜索)

    题目链接:http://115.159.40.116/problem_show.php?pid=5177 题目描述 农夫 John 建造了一座很长的畜栏,它包括N (2 <= N <= 1 ...

最新文章

  1. 在Spring Rest模板中跳过SSL证书验证
  2. 计算机基础及应用笔试,计算机基础及应用测试笔试题
  3. 简单Android app开发_如何简单快速开发外卖app?
  4. hadoop10---消息队列
  5. 51nod1464(trie + dfs)
  6. bzoj 2243: [SDOI2011]染色 线段树区间合并+树链剖分
  7. HTTP 连接管理进化论
  8. php时间戳怎么转换成时间格式,php时间戳如何转换为时间格式
  9. Flash游戏开发必备书籍
  10. 屏幕录像专家安装说明
  11. Mysql修改字段名、修改字段类型
  12. uniapp——如何在项目中使用阿里字体图标
  13. 详细的世界坐标转屏幕坐标及投影矩阵的推导
  14. 解决Jenkins不能在线安装maven持续集成插件(百度云离线下载)
  15. linux nas mp4 播放器,我的NAS我的地盘 篇十:威联通NAS软件介绍与应用之QVideo篇
  16. 5款主流智能音箱入门款测评:苹果小米华为天猫小度,谁的表现更胜一筹?
  17. 做seo必须要懂得的技术:黑帽seo和白帽seo的几点
  18. 【C语言结构体题】定义用于存储学生信息的结构体数组,输入学生的准考证号、姓名和成绩信息,计算总分,并按总分由高到低输出。
  19. python离线翻译包下载_Python翻译
  20. ArcGIS属性表的计算

热门文章

  1. 网络安全学习方法论之体系到底有多重要?
  2. parameterized插件在线安装
  3. Linux -- 如何下载可用的 deb 包
  4. Python实现批量合并多张图片的方法(附源码)
  5. 产品经理的四项基本能力
  6. js函数传参时:值传递和引用传递的区别
  7. Java基础系列-Collector和Collectors
  8. 电脑耳机为什么会有很大噪声
  9. MC9S12XEP100的IIC模块(IICV3)
  10. Linux(Centos)下刻录光盘