http://codeforces.com/problemset/problem/810/B
题目大意,你当n天的售货员,你有f天有使得当天售卖衣服数量翻倍的权利,每个客人来只会买走一件衣服。
问,你可以售卖的最大衣服数量是多少。
我们直接把每天如果衣服翻倍的增益给排序,然后选出前f个即可。
代码如下:
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 5;
int main(){
ios::sync_with_stdio(false);
vector <pair<int, int> >v;
int n, f, k[maxn], l[maxn];
cin >> n >> f;
for(int i = 0; i < n; i++){
cin >> k[i] >> l[i];
int tmp = l[i] > k[i] ? min(l[i] - k[i], k[i]) : 0;
v.push_back(make_pair(tmp, i));
}
sort(v.begin(), v.end());
for(int i = 0; i < f; i++){
k[v[n - 1 - i].second] *= 2;
}
long long ans = 0;
for(int i = 0; i < n; i++){
ans += min(k[i], l[i]);
}
cout << ans << endl;
return 0;
}