O(n³)AC,但是是否可以优化
查看原帖
O(n³)AC,但是是否可以优化
765061
AsiraeM楼主2022/11/10 17:24

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;
}
2022/11/10 17:24
加载中...