比赛描述
小A是餐厅的洗碗师,每个碗有两个元素pi和di。
pi表示如果这个碗被洗了,小A会收到pi的报酬
di表示如果这个碗没被洗,小A需要支付di的赔偿费。
然而小A最多只有洗K个碗的时间,所以他想知道他最多可以赚多少钱。
输入
第一行是n和K,表示一共有n个碗,最多可以洗K个
以下n行为:
pi di
Constraints
For of the maximum score, .
输出
输出最大获利多少钱
样例输入
2 1
10 5
3 1
样例输出
9
贪心题,理解好题意就行,排序弄好基本就过了,test 3 wa了好几发,最后发现是输出的问题。long long输出lld不给过,I64d就过了,记得别的oj可以的。。。
#include <cstdio>
#include <algorithm>
#include <iostream>
using namespace std;
typedef long long int ll;
struct l
{
int p;
int d;
int v;
}List[200001];
bool cmp(l a,l b)
{
return a.v>b.v;
}
int main()
{
int n,k;
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++){
scanf("%d%d",&List[i].p,&List[i].d);
List[i].v=List[i].p+List[i].d;
}
sort(List+1,List+n+1,cmp);
ll sum=0;
for(int i=1;i<=k;i++){
sum+=List[i].p;
}
for(int i=k+1;i<=n;i++){
sum-=List[i].d;
}
if(sum<0)
{
sum=0;
}
printf("%I64d\n",sum);
return 0;
}