#include<bits/stdc++.h>
using namespace std;
const int N=510,K=110;
struct node
{
int x,y;
}a[N];
int n,k,f[N][K],ans=-1;
bool cmp(node p,node q)
{
if(p.x==q.x) return p.y<q.y;
return p.x<q.x;
}
int main()
{
//freopen("point.in","r",stdin);
//freopen("point.out","w",stdout);
cin>>n>>k;
for(int i=1;i<=n;i++) cin>>a[i].x>>a[i].y;
sort(a+1,a+n+1,cmp);
for(int i=1;i<=n;i++)
for(int j=0;j<=k;j++) f[i][j]=j+1;
for(int i=2;i<=n;i++)
for(int j=i-1;j>=1;j--)
{
if(a[j].y>a[i].y)continue;
int len=(a[i].x-a[j].x)+(a[i].y-a[j].y)-1;
for(int l=len;l<=k;l++) f[i][l]=max(f[i][l],f[j][l-len]+len+1);
}
for(int i=1;i<=n;i++)
ans=max(ans,f[i][k]);
cout<<ans;
return 0;
}
az,我有个不解的地方,为什么这个代码已经对 a 数组进行排序了,还要在循环里加一句if?而且还必须加了才能 AC。