zoukankan      html  css  js  c++  java
  • P2376 [USACO09OCT]津贴Allowance

    这道题其实就是个贪心,先选大的,后考虑小的,在实现时注意细节就好了

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<algorithm>
     4 #define II int
     5 #define B bool
     6 #define R register
     7 #define I 123456
     8 using namespace std;
     9 
    10 struct node {
    11     II buy,nu;
    12 }aa[I];
    13 
    14 II n,c,ans;
    15 
    16 B maP(node a1,node a2) { return a1.buy>a2.buy; }
    17 
    18 int main()
    19 {
    20     freopen("1.in","r",stdin);
    21 
    22     scanf("%d%d",&n,&c);
    23     for(R II i=1;i<=n;i++)
    24     {
    25         scanf("%d%d",&aa[i].buy,&aa[i].nu);
    26     } 
    27 
    28     sort(aa+1,aa+n+1,maP);
    29 
    30     R II now=1, en=n;
    31     while (aa[now].buy>=c) {
    32         ans+=aa[now].nu;
    33         now++;
    34     }
    35 
    36     while (1) {
    37         R II ka=c;
    38         // 小技巧; 
    39         for(R II i=now;i<=n;i++)
    40         // 所谓的从大到小贪心就是这个枚举顺序了; 
    41         {
    42             while (ka>=aa[i].buy&&aa[i].nu&&ka>0) {
    43                 ka-=aa[i].buy;
    44                 aa[i].nu--;
    45             }
    46             // 一直减到不能再减为止,然后换下一个值;
    47         } 
    48         if(ka>0) for(R II i=n;i>=now;i--) {
    49             if(aa[i].buy>=ka&&aa[i].nu) {
    50                 aa[i].nu--;
    51                 ka-=aa[i].buy;
    52                 break ;
    53             }
    54         }
    55         // 找一个大于剩余值且最小的, 补全; 
    56         if(ka>0) break ;
    57         // 如果还不行,证明剩下的组不成c了,结束; 
    58         ans++;
    59     }
    60 
    61     printf("%d
    ",ans);
    62     exit(0);
    63 }
  • 相关阅读:
    「2019纪中集训Day20」解题报告
    PHP基础入门
    javascript
    正则表达式
    DOM 节点
    对象
    字符串
    函数
    for循环
    jQuery
  • 原文地址:https://www.cnblogs.com/hahaha2124652975/p/11638399.html
Copyright © 2011-2022 走看看