• 防晒【贪心 + 平衡树】



    image

    证明不会:yxc说要用匈牙利算法,来确定增广路径;

    算法步骤:

    1.将牛按minspf从大到小排序

    2.每次取出满足当前条件,最大的spf。


    因为是按开始从大到小排序,所以假设x, y防晒,spfs[x] < spfs[y], 那么可能后面的牛能用到x,y,或者只用到x,或者都用不上。因为后面的牛可能可以用x,所以当前这头牛应该选择在它适合的范围最大的spf。

    所以结论成立。

    代码

      1 #include <iostream>
      2 #include <algorithm>
      3 #include <map>
      4 using namespace std;
      5 
      6 typedef pair<int, int> PII;
      7 const int N = 2500 + 5;
      8 PII cows[N];
      9 int main(){
     10     int c,l;
     11     cin >> c >> l;
     12     map<int, int> spfs;
     13     for(int i = 0; i < c; ++ i)cin >> cows[i].first >> cows[i].second;
     14     for(int i = 0; i < l; ++ i){
     15         int spf, cover;
     16         cin >> spf >> cover;
     17         spfs[spf] += cover;
     18     }
     19     sort(cows, cows+c);
     20     int res = 0;
     21     spfs[0] = spfs[1001] = c; //auto spf = spfs.upper_bound(cows[i].second);
     22                             //这句话是在spfs中查找大于cows[i].second的最小元素
     23                             //,设置哨兵是为了让这条语句不返回空。
     24     for(int i = c-1; i >= 0; -- i){
     25         auto spf = spfs.upper_bound(cows[i].second);//找出第一个大于它的数
     26         spf--;
     27         if(spf->first >= cows[i].first){
     28             res++;
     29             if(--spf->second == 0)
     30                 spfs.erase(spf);
     31         }
     32     }
     33     cout << res << endl;
     34     return 0;
     35 }
  • 相关阅读:
    webpack入门
    vue 知识记录
    vue 服务端渲染案例
    nodemon的简单配置和使用
    vue 非父子组件通信-中转站
    position笔记
    koa 练习
    笔记
    git push代码时的'git did not exit cleanly (exit code 1)'问题解决
    块级元素的text-align对行内元素和果冻元素(inline-block)的作用
  • 原文地址:https://www.cnblogs.com/rstz/p/14391034.html
Copyright © 2020-2023  润新知