题意:有n天,每天最多可以卖的产品ki件,来购买产品的顾客li,每个顾客买一件,可以选定f天,使得可以(待)卖的产品数翻倍,问怎么安排使得卖的产品数最多,输出产品数。
思路:先从l和k中取小的,作为没有翻倍前卖的产品数
对任意一天如果
1。ki>=li则k翻倍没有效果,不会增加卖的产品数
2。ki<li
如果2*ki<li 则增加ki件产品
如果2*ki>=li,则(卖出)产品数增加li-ki
只需将增加量从大到小排序,取m个大的
#include<cstdio>
#include<algorithm>
#define ll long long
#define Min(a,b) (a)<(b)?(a):(b)
using namespace std;
const int maxn = 1e5+10;
int a[maxn];
bool cmp(int a,int b)
{
return a>b;
}
int main()
{
int n,k;
while(~scanf("%d%d",&n,&k))
{
ll ans=0;
int l,kk,j=0;
for(int i=0;i<n;i++)
{
scanf("%d%d",&kk,&l);
ans+=Min(kk,l);
if(kk<l)
{
ll temp=2*kk;
if(temp<l)
a[j++]=kk;
else if(temp>=l)
a[j++]=l-kk;
}
}
sort(a,a+j,cmp);
for(int i=0;i<k&&i<j;i++)
ans+=a[i];
printf("%I64d\n",ans);
}
}

379

被折叠的 条评论
为什么被折叠?



