题目链接
思路:
首先找比最大的b[i]大的a[i],再找剩下的数中买剩下个数的花的最大值即可。
代码:
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
const int N=2e5+7;
const double eps=1e-8;
const int mod=1e9+7;
const int inf=0x7fffffff;
const double pi=3.1415926535;
pair<int,int>a[N];
int c[N],s[N];
signed main()
{
int t;
cin>>t;
while(t--)
{
int n,m;
cin>>n>>m;
for(int i=1;i<=m;i++)
{
cin>>a[i].first>>a[i].second;
c[i]=a[i].first;
}
sort(c+1,c+m+1);
for(int i=1;i<=m;i++)
{
s[i]=s[i-1]+c[i];
}
int res=0;
for(int i=1;i<=m;i++)
{
int sum=0,q=n;
int pos=lower_bound(c+1,c+m+1,a[i].second)-c;
int g=min(q,m-pos+1);
sum+=s[m]-s[m-g];
q-=g;
if(q==0)
{
res=max(res,sum);
}
else
{
if(c[pos]>a[i].first||pos==m+1)
{
sum+=a[i].first;
q--;
}
sum+=q*a[i].second;
res=max(res,sum);
}
}
cout<<res<<endl;
}
return 0;
}