题目连接:3971 - Assemble

题目大意:有若干个零件, 每个零件给出的信息有种类, 名称, 价格, 质量,  现在给出一个金额, 要求在这个金额范围内, 将每个种类零件都买一个, 并且尽量让这些零件中质量最小的越大, 输出质量最小的值。

解题思路:首先可以用二分搜索确定质量, 然后在搜索的过程中要判断这个质量是否能被满足, 判断函数可以用贪心, 在每一类的零件中选择价格最低且质量大于等于当前质量的零件。(事先按照价格大小排序)。

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <algorithm>
  4. using namespace std;
  5. const int N = 1005;
  6. const int M = 25;
  7.  
  8. struct State {
  9. char name[M];
  10. int money;
  11. int wei;
  12. }s[N][N];
  13. int cnt, sum, son[N];
  14. char str[N][M], sex[M];
  15.  
  16. bool cmp(const State& a, const State& b) {
  17. return a.money < b.money;
  18. }
  19.  
  20. int find(char sex[]) {
  21. for (int i = 0; i < cnt; i++)
  22. if(strcmp(sex, str[i]) == 0)
  23. return i;
  24. strcpy(str[cnt], sex);
  25. return cnt;
  26. }
  27.  
  28. bool judge(int Min) {
  29. int tmp = 0;
  30. for (int i = 0; i < cnt; i++) {
  31. int flag = 1;
  32. for (int j = 0; j < son[i]; j++) {
  33. if (s[i][j].wei >= Min) {
  34. flag = 0;
  35. tmp += s[i][j].money;
  36. break;
  37. }
  38. }
  39. if (flag || tmp > sum) return false;
  40. }
  41. return true;
  42. }
  43.  
  44. int main() {
  45. State now;
  46. int cas, n, cur, L, R;
  47. scanf("%d", &cas);
  48. while (cas--) {
  49. memset(s, 0, sizeof(s));
  50. memset(son, 0, sizeof(son));
  51. memset(str, 0, sizeof(str));
  52. cnt = L = R = 0;
  53.  
  54. scanf("%d%d", &n, &sum);
  55. for (int i = 0; i < n; i++) {
  56. scanf("%s%s%d%d", sex, now.name, &now.money, &now.wei);
  57. if (now.wei > R) R = now.wei;
  58. cur = find(sex);
  59. s[cur][son[cur]++] = now;
  60. if (cur == cnt) cnt++;
  61. }
  62.  
  63. for (int i = 0; i < cnt; i++)
  64. sort(s[i], s[i] + son[i], cmp);
  65.  
  66. int mid;
  67. while (L < R) {
  68. mid = (L + R) / 2;
  69. if (L == mid) break;
  70. if (judge(mid))
  71. L = mid;
  72. else
  73. R = mid;
  74. }
  75. if (judge(mid + 1)) mid++;
  76. printf("%d\n", mid);
  77. }
  78. return 0;
  79. }

uvalive 3971 - Assemble(二分搜索 + 贪心)的更多相关文章

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

    先从中找出性能最好的那个数, 在用钱比較少的去组合,能组出来就表明答案在mid的右边,反之在左边, #include<string.h> #include<map> #incl ...

  2. UVALive 3971 Assemble(模拟 + 二分)

    UVALive 3971 题意:有b块钱.想要组装一台电脑,给出n个配件的种类,名字,价格,品质因子.若各种类配件各买一个,总价格<=b,求最差品质配件的最大品质因子. 思路: 求最大的最小值一 ...

  3. UVALive 3971 Assemble(二分+贪心)

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

  4. UVaLive 3971 Assemble (水题二分+贪心)

    题意:你有b元钱,有n个配件,每个配件有各类,品质因子,价格,要每种买一个,让最差的品质因子尽量大. 析:很简单的一个二分题,二分品质因子即可,每次计算要花的钱的多少,每次尽量买便宜且大的品质因子. ...

  5. uvalive 3971 Assemble

    https://vjudge.net/problem/UVALive-3971 题意: 现在你要组装一台电脑,每个电脑的一种类型的配件都有多种选择,它们的名字是不同的. 现在给出已有的元件,每种类型都 ...

  6. nyoj914Yougth的最大化(二分搜索 + 贪心)

    Yougth的最大化 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 Yougth现在有n个物品的重量和价值分别是Wi和Vi,你能帮他从中选出k个物品使得单位重量的价值最大吗 ...

  7. nyoj914(二分搜索+贪心)

    题目意思: pid=914">acm.nyist.net/JudgeOnline/problem.php?pid=914 如今有n个物品的重量和价值各自是Wi和Vi,你能帮他从中选出k ...

  8. UVALive 4225 Prime Bases 贪心

    Prime Bases 题目连接: https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&a ...

  9. UVALive 7464 Robots (贪心)

    Robots 题目链接: http://acm.hust.edu.cn/vjudge/contest/127401#problem/K Description http://7xjob4.com1.z ...

随机推荐

  1. poj 3624 Charm Bracelet 01背包问题

    题目链接:poj 3624 这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放.             用子问题定义状态:即F [i, v]表示前i件物品恰放入一个容量为v 的背包可以 ...

  2. php mysql实现栏目分类递归

    header("content-type:text/html;charset=utf-8"); $dbhost = "localhost";   // 数据库主 ...

  3. [LeetCode]题解(python):076-Minimum Window Substring

    题目来源: https://leetcode.com/problems/minimum-window-substring/ 题意分析: 给定两个字符串S和T.在S中找到最短的一个子字符串使得他包括所有 ...

  4. IOS 学习笔记(3) 视图UITabbarController

    1.UITabbarViewController标签试图控制器.由于标签页本就起着分类的作用,所以往往呈现的视图内容之间,可以是毫不相关的功能. UITabbarViewController仍然继承自 ...

  5. float编码杂谈

    浮点数的编码转换采用的是IEEE规定的编码标准,float和double 这两种类型的数据的转换原理相同,但是由于范围不一样,编码方式有些区别.IEEE规定的编码会将一个浮点数转换为二进制数.以科学计 ...

  6. MFC自绘控件学习总结

    前言:从这学期开始就一直在学习自绘控件(mfc),目标是做出一款播放器界面,主要是为了打好基础,因为我基础实在是很烂....说说我自己心得体会以及自绘控件的方法吧,算是吐槽吧,说的不对和不全的地方,或 ...

  7. php单元測试

    你是否在程序开发的过程中遇到下面的情况:当你花了非常长的时间开发一个应用后,你觉得应该是大功告成了,可惜在调试的时候,老是不断的发现bug,并且最可怕的是,这些bug是反复出现的,你可能发现这些bug ...

  8. java实现字符串匹配问题之求两个字符串的最大公共子串

    转载请注明出处:http://blog.csdn.net/xiaojimanman/article/details/38924981 近期在项目工作中有一个关于文本对照的需求,经过这段时间的学习,总结 ...

  9. DMA(STM32)

     1.DMA:data memory access //实际的内存存储 注:DMA干活的时候是不须要CPU干涉的 2. ①内存(定义的变量)---外设(寄存器). ②内存---内存 ③外设---外 ...

  10. 对象图(Object Diagram)—UML图(三)

    一.用一张图来介绍一下对象图的基本内容 二.对象图与类图的基本差别 三.对象图实例