• P2887 [USACO07NOV]Sunscreen G


    Lisa

    对于这样的贪心题,很容易想到按照某个顺序排个序,比如说最小的spfa值递减

    因为这样的话,对于每一瓶防晒霜,要不前面的牛能用,要不只有前面的牛能用

    这样为了给后面省出尽可能多的防晒霜,不如把能用的最大的给前面的牛

    也确实如此

    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #include<algorithm>
    using namespace std;
    template<class T>inline void read(T &x)
    {
        x=0;register char c=getchar();register bool f=0;
        while(!isdigit(c))f^=c=='-',c=getchar();
        while(isdigit(c))x=(x<<3)+(x<<1)+(c^48),c=getchar();
        if(f)x=-x;
    }
    template<class T>inline void print(T x)
    {
        if(x<0)putchar('-'),x=-x;
        if(x>9)print(x/10);
        putchar('0'+x%10);
    }
    int c;
    struct cow{
    	int mi;
    	int ma;
    	friend bool operator  <(cow x,cow y){
    		return x.ma<y.ma;
    	}
    }co[26000];
    int l;
    int cnt;
    //int num[2600];
    //int eff[2600];
    struct sp{
    	int num;
    	int eff;
    	friend bool operator <(sp x,sp y){
    		return x.eff<y.eff;
    	}
    }s[2500];
    int main(){
    	read(c);read(l);
    	for(int i=1;i<=c;++i){
    		read(co[i].mi);read(co[i].ma);
    	}
    	for(int i=1;i<=l;++i){
    		read(s[i].eff);read(s[i].num);
    	}
    	sort(co+1,co+c+1);
    	sort(s+1,s+l+1);
    	for(int i=1;i<=c;++i){
    		for(int j=1;j<=l;++j){
    			if(s[j].num&&(s[j].eff>=co[i].mi&&s[j].eff<=co[i].ma)){
    				s[j].num--;
    				cnt++;
    				break;
    			}
    		}
    	}
    	cout<<cnt;
    	return 0;
    }
    
  • 相关阅读:
    Thread与Handler
    开始机顶盒的生涯
    解决布局被键盘顶的难题
    自动滚动的Textview
    2-解决粘包问题
    1-socket编程
    zipfile模块
    subprocess模块
    day31-异常处理
    collections模块
  • 原文地址:https://www.cnblogs.com/For-Miku/p/15491616.html
Copyright © 2020-2023  润新知