Floyd,一共跑了3秒多,最大的一个点131毫秒,但是看别人的Floyd都跑得很快,是不是常数的原因还是有什么技巧没用上
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll f[505][2],e[505][505],E[505][505],i,j,l,n,k,maxn=0;
int main()
{
cin>>n>>k;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
e[i][j]=2000000000;
for(i=1;i<=n;i++)cin>>f[i][0]>>f[i][1];
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(f[j][0]>=f[i][0]&&f[j][1]>=f[i][1]&&!(f[i][0]==f[j][0]&&f[i][1]==f[j][1]))
e[i][j]=E[i][j]=f[j][0]-f[i][0]+f[j][1]-f[i][1]-1;
for(l=1;l<=n;l++)
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(e[i][j]>e[i][l]+e[l][j])
e[i][j]=e[i][l]+e[l][j];
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(e[i][j]<=k&&E[i][j]+k-e[i][j]>maxn)
maxn=E[i][j]+k-e[i][j];
maxn+=2;
cout<<maxn<<endl;
return 0;
}