标签:贪心
题意:给出一系列比赛和结果,可以花钱买任意一场比赛或几场比赛的进球,问买完后最多能得多少分。胜3分,平1分,负0分。
思路:贪心。策略:1.赢的直接+3 2.其他的按净胜球升序排序,能买赢就买赢,不然买平。详见代码:
/********************************************************* file name: LA6530.cpp author : kereo create time: 2015年02月06日 星期五 22时54分16秒 *********************************************************/ #include<iostream> #include<cstdio> #include<cstring> #include<queue> #include<set> #include<map> #include<vector> #include<stack> #include<cmath> #include<string> #include<algorithm> using namespace std; typedef long long ll; const int sigma_size=26; const int N=100+50; const int MAXN=100000+50; const int inf=0x3fffffff; const double eps=1e-8; const int mod=100000000+7; #define L(x) (x<<1) #define R(x) (x<<1|1) #define PII pair<int, int> #define mk(x,y) make_pair((x),(y)) int n,m; int a[MAXN]; int main(){ while(~scanf("%d%d",&n,&m)){ int ans=0,cnt=0; for(int i=1;i<=n;i++){ int x,y; scanf("%d%d",&x,&y); if(x>y) ans+=3; else a[cnt++]=y-x; } sort(a,a+cnt); int k=0; while(m && k<cnt){ if(m>=a[k]+1){ m-=a[k]+1; ans+=3; k++; } else if(m>=a[k]){ m-=a[k]; ans++; k++; } else break; } for(int i=k;i<cnt;i++) if(a[i] == 0) ans++; printf("%d\n",ans); } return 0; }
标签:贪心
原文地址:http://blog.csdn.net/u011645923/article/details/43578749