Facer帮父亲

by luogu

一开始尝试去dp,发现状态没有办法找完全,于是搂了眼标签

哦,我们可以尝试去化简式子

写道代码里了(没用LATEX

我们考虑一下同一景点中尝试调整一下票价(由于max( (ai - bi * x),0 )代表的是人数,所以就当作)

假如+1,那么变化量:

[(x+1)*ai(x+1)^2*bi][x*ai−x^2*bi]

=aibi2*x*bi

​那么我们在开始时判断一下a,b的大小关系,a<b就可以跳了

 

 

#include<bits/stdc++.h>

#define int long long
using namespace std;
const int N=1e5+7;
//第i个景点收益:(ai-bi*x)*x 
//(ax-bx^2 )
// 1~n(x_i)<=k

int n,k;
//int a[N],b[N];
priority_queue< pair<int ,int > >q;
int ans;

signed main()
{
     ios::sync_with_stdio(false);
    cin>>n>>k;
    for(int i=1;i<=n;i++)
    {
        int x,y;    
        cin>>x>>y;
        if(x-y>0)
        q.push({x-y,y});
    }    
    
     while((k--)&&(!q.empty()))
     {
         int x=q.top().first,y=q.top().second;
         q.pop();
         ans+=x;
         x-=(y<<1);
         if(x<=0)
         continue;
         else
         q.push(make_pair(x,y) );
     }
     
      cout<<ans;
    return 0;     
}

 

posted @ 2021-09-03 20:38  Hehe_0  阅读(46)  评论(0)    收藏  举报