zoukankan      html  css  js  c++  java
  • LA 3971 Assemble(二分)

    题目:

    给你b元钱,让你组装一台电脑,有n个配件,属性有 种类 名字 价格 品质,每种类型选至少一个,并且最小品质最大。输出这个最大的最小品质。

    白书上说了,最小值最大的问题一般是二分来求解答案。在这里我们二分这个品质。这个题在判断时因为数据较小,所以线性查找了,如果遇到大数据就要排序+lower_bound了...

    代码如下:

     1 #include <bits/stdc++.h>
     2 
     3 using namespace std;
     4 const int  M=1005;
     5 int cnt,n,b;
     6 map<string,int> id;
     7 int ID(string s)
     8 {
     9     if (!id.count(s))
    10     id[s]=cnt++;
    11     return id[s];
    12 }
    13 struct Component
    14 {
    15     int price,quality;
    16 };
    17 vector<Component>comp[M];
    18 bool ok(int q)
    19 {
    20     int sum=0;
    21     for(int i=0;i<cnt;++i){
    22         int cheapest=b+1,m=comp[i].size();
    23         for (int j=0;j<m;++j)
    24             if (comp[i][j].quality>=q)cheapest=min(cheapest,comp[i][j].price);
    25         if (cheapest==b+1) return false;
    26         sum+=cheapest;
    27         if (sum>b) return false;
    28     }
    29     return true;
    30 }
    31 int main()
    32 {
    33     int t;
    34     //freopen("de.txt","r",stdin);
    35     scanf("%d",&t);
    36     while (t--)
    37     {
    38         scanf("%d%d",&n,&b);
    39         cnt=0;
    40         for (int i=0;i<n;++i)
    41         comp[i].clear();
    42         id.clear();
    43         int maxq=0;
    44         for (int i=0;i<n;++i)
    45         {
    46             char type[30],name[30];
    47             int q,p;
    48             scanf("%s%s%d%d",type,name,&p,&q);
    49             maxq=max(maxq,q);
    50             comp[ID(type)].push_back((Component){p,q});
    51         }
    52         int L=0,R=maxq;
    53         while(L<R)
    54         {
    55             int M=L+(R-L+1)/2;
    56             if (ok(M))
    57             L=M;
    58             else
    59             R=M-1;
    60         }
    61         printf("%d
    ",L);
    62     }
    63     return 0;
    64 }
  • 相关阅读:
    java对象序列化机制
    进程和线程的区别
    关于Java中的String类的不可变
    计算机编码ASCII、UNICODE和UTF-8
    mybatis中的一级缓存和二级缓存
    SQL语句之EXSITS谓词
    git学习笔记
    hdu1542-扫描线求矩形面积并
    首场ACM总结——2019JXCPC(CCPC江西省省赛)
    hdu1199(离散化线段树)
  • 原文地址:https://www.cnblogs.com/agenthtb/p/5995913.html
Copyright © 2011-2022 走看看