Football
时间限制(普通/Java) : 1000 MS/ 3000 MS 运行内存限制 : 65536 KByte
总提交 : 338 测试通过 : 98
比赛描述
现在你是一名足球经理,你的队伍将参加“南邮杯”的比赛。然而你拥有预知未来的能力,你可以预见你的队伍接下来进行的n场比赛每场的进球数和失球数。每胜一场队伍可得3分,平一场可得1分,输一场得0分。然而“南邮杯”是有黑幕的,你通过砸钱现在可以买到m个进球,问现在如何安排这m个进球,可以使得队伍获得最大的积分,求出这个最大的积分。
输入
多样例输入。
第一行给出n(1<=n<=10)和m(0<=m<=20)分别代表你队伍进行的比赛数以及队伍可买的进球数。
接下来n行,每行分别有两个数x和y分别表示该场比赛在没有买进球的情况下你队伍的进球数和失球数。
输出
对于每个样例答案输出一行输出一个整数,表示通过买球的方式你的队伍可获得的最大积分。
样例输入
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
题目来源
时间限制(普通/Java) : 1000 MS/ 3000 MS 运行内存限制 : 65536 KByte
总提交 : 338 测试通过 : 98
比赛描述
现在你是一名足球经理,你的队伍将参加“南邮杯”的比赛。然而你拥有预知未来的能力,你可以预见你的队伍接下来进行的n场比赛每场的进球数和失球数。每胜一场队伍可得3分,平一场可得1分,输一场得0分。然而“南邮杯”是有黑幕的,你通过砸钱现在可以买到m个进球,问现在如何安排这m个进球,可以使得队伍获得最大的积分,求出这个最大的积分。
输入
多样例输入。
第一行给出n(1<=n<=10)和m(0<=m<=20)分别代表你队伍进行的比赛数以及队伍可买的进球数。
接下来n行,每行分别有两个数x和y分别表示该场比赛在没有买进球的情况下你队伍的进球数和失球数。
输出
对于每个样例答案输出一行输出一个整数,表示通过买球的方式你的队伍可获得的最大积分。
样例输入
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
贪心法,按(x-y)从大到小排序,用最小代价换取最大利益。
代码:
/**************************************
* *
* -*- coding: utf-8 -*- *
* @Date : 2016-04-09 16:12:00 *
* @Author : Zeroinger *
* *
*************************************/
#include <iostream>
#include <cstring>
#include <cmath>
#include <queue>
#include <stack>
#include <list>
#include <map>
#include <set>
#include <sstream>
#include <string>
#include <vector>
#include <cstdio>
#include <algorithm>
using namespace std;
int n, m;
struct Node {
int x, y;
int X_Y;
};
Node num[15];
bool cmp(Node a, Node b)
{
return a.X_Y > b.X_Y;
}
int main()
{
int ans;
while (scanf("%d%d", &n, &m) != EOF)
{
ans = 0;
for (int i = 0; i < n; i++)
{
scanf("%d%d", &num[i].x, &num[i].y);
num[i].X_Y = num[i].x - num[i].y;
}
sort(num, num + n, cmp);
for (int i = 0; i < n; i++)
{
if (num[i].X_Y > 0) continue;
while (num[i].X_Y <= 0 && m > 0)
{
m--;
num[i].X_Y++;
}
}
for (int i = 0; i < n; i++)
{
if (num[i].X_Y > 0) ans += 3;
if (num[i].X_Y == 0) ans += 1;
}
cout << ans << endl;
}
return 0;
}