下了一个测试点,好像知道哪错了,但不会改。第二个测试点p全加起来是答案,但是用我的算法算出来不是这个,有三对d相等
#include<bits/stdc++.h>
using namespace std;
struct work{
int d,p;
}a[100000001];
long long n,maxn=0,sum=0;
bool cmp(work l,work b)
{
return l.d<b.d;
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
scanf("%d%d",&a[i].d,&a[i].p);
}
sort(a+1,a+1+n,cmp);//排序
for(int i=1;i<=n;i++)
{
if(a[i].d!=a[i-1].d)
{
maxn+=a[i].p;//贪心
}
else
{
maxn=max(maxn,maxn-a[i-1].p+a[i].p);//选择最佳的方案
}
}
cout<<maxn;
}