题目链接:http://codeforces.com/contest/810/problem/B
题意:给定天数和货物可以翻倍的天数,每天都有一定的货物量和顾客数,问怎么样货物才能卖得最多(前一天的货物不会留到下一天,每个顾客只能买一个货物)。
简单的贪心问题,贪心策略是:如果两倍的货物量卖出去的更多,就选两倍的,否则就选一倍的。
那一天能卖出去的货物量:min(货物量,顾客数)。然后根据结构体排序一下就ok了
1 #include <iostream> 2 #include <algorithm> 3 using namespace std; 4 5 const int N=1e5+10; 6 7 struct TnT{ 8 long long k; 9 long long l; 10 }T[N]; 11 12 bool cmp(TnT a,TnT b){ 13 return (min(2*a.k,a.l)-min(a.k,a.l))>(min(2*b.k,b.l)-min(b.k,b.l)); 14 } 15 16 int main(){ 17 long long n,f,res=0; 18 cin>>n>>f; 19 for(int i=0;i<n;i++){ 20 cin>>T[i].k>>T[i].l; 21 } 22 sort(T,T+n,cmp); 23 for(int i=0;i<n;i++){ 24 if(f>0) {res+=min(2*T[i].k,T[i].l);f--;} 25 else res+=min(T[i].k,T[i].l); 26 } 27 cout<<res<<endl; 28 return 0; 29 }
时间: 2024-11-01 12:25:32