南邮 OJ 2082 Football

Football

时间限制(普通/Java) :  1000 MS/ 3000 MS          运行内存限制 : 65536 KByte
总提交 : 283            测试通过 : 80 

比赛描述

现在你是一名足球经理,你的队伍将参加“南邮杯”的比赛。然而你拥有预知未来的能力,你可以预见你的队伍接下来进行的n场比赛每场的进球数和失球数。每胜一场队伍可得3分,平一场可得1分,输一场得0分。然而“南邮杯”是有黑幕的,你通过砸钱现在可以买到m个进球,问现在如何安排这m个进球,可以使得队伍获得最大的积分,求出这个最大的积分。



输入

多样例输入。

第一行给出n(1<=n<=10)m(0<=m<=20)分别代表你队伍进行的比赛数以及队伍可买的进球数。

接下来n行,每行分别有两个数xy分别表示该场比赛在没有买进球的情况下你队伍的进球数和失球数。

输出

对于每个样例答案输出一行输出一个整数,表示通过买球的方式你的队伍可获得的最大积分。

样例输入

2 1
1 1
1 1
3 2
1 3
3 1
2 2
4 10
1 1
2 2
1 3
0 4

样例输出

4
6
12

题目来源

NUPT






#include<iostream>
#include<algorithm>
using namespace std;
int main(){
	int n,m,x,y,i,score;
	int a[10];
	while(cin>>n>>m){
		for(i=0;i<n;i++){
			cin>>x>>y;
			a[i] = x-y;
		}
		sort(a,a+n);
		score = 0;
		for(i=n-1;i>=0 && m>=0;i--){
			if(a[i]>0){					//本来就是要赢的
				score += 3;
			}else if(a[i]==0){			//本来是要平的
				if(m>=1){
					m--;
					score += 3;
				}else{
					score += 1;
				}
			}else{						//本来是要输的
				if(m+a[i]>0){
					m += a[i]-1;
					score += 3;
				}else if(m+a[i]==0){
					m += a[i];
					score += 1;
				}else{
					break;
				}
			}
		}
		cout<<score<<endl;
	}
}


你可能感兴趣的:(ACM,Football,南邮OJ)