#include <bits/stdc++.h>
using namespace std;
const int maxN = 3010;
int f[maxN][maxN];
struct item
{
int w,r;
bool operator <(const item &x)const
{
return r>x.r;
}
}a[maxN];
int main()
{
int N;
scanf("%d",&N);
for(int i=1;i<=N;i++)scanf("%d%d",&a[i].w,&a[i].r);
sort(a+1,a+1+N);
f[1][1]=a[1].w;
for(int i=2;i<=N;i++)
{
for(int j=1;j<=i;j++)
{
f[i][j]=f[i-1][j-1]+a[i].w-(j-1)*a[i].r;
if(i-1>=j)f[i][j]=max(f[i][j],f[i-1][j]);
}
}
int ans=0;
for(int j=1;j<=N;j++)ans=max(ans,f[N][j]);
printf("%d\n",ans);
}
为什么25行的条件不能加,加上会WA两个点,去掉就A了