关于全WA这个代码问题……
查看原帖
关于全WA这个代码问题……
393811
大海中的孤帆楼主2023/8/4 07:35

代码如下

#include<bits/stdc++.h>
using namespace std;
int n,k;
int f[510][510];
int d[510][510];
struct zb
{
	int x,y;
}xy[510];
int jds(int a)
{
	if(a<0)
		a*=-1;
	return a;
}
bool cmp(zb b,zb c)
{
	if(c.x==b.x)
		return b.y<c.y;
	return b.x<c.x;
}
int qm(int a,int b)
{
	if(a<b)
		return a;
	return b;
}
int main()
{
	cin>>n>>k;
	for(int i=0;i<n;++i)
	{
		for(int j=0;j<n;++j)
		{
			f[i][j]=0x3f;
		}
		f[i][i]=0;//f[i][j]表示从第i个点到第j个点所需添加的整点数
		d[i][i]=1;//d[i][i]表示从第i个点到第j个点所构成的最长序列
	}
	for(int i=0;i<n;++i)
	{
		cin>>xy[i].x>>xy[i].y;
	}
	sort(xy,xy+n,cmp);
	for(int i=0;i<n;++i)
	{
		for(int j=i+1;j<n;++j)
		{
			if(xy[i].x<=xy[j].x&&xy[i].y<=xy[j].y)//保持单调递增
			{
				f[i][j]=jds(xy[i].x-xy[j].x)+jds(xy[i].y-xy[j].y)-1;//对f[i][j]进行初始化
				d[i][j]=f[i][j]+2;
			}
			if(f[i][j]>k)
				f[i][j]=0x3f;
		}
	}
	for(int i=0;i<n;++i)
	{
		for(int j=i+1;j<n;++j)
		{
			for(int k=j+1;k<n;++k)
			{
				if(xy[i].x<=xy[k].x&&xy[k].y<=xy[j].y)
				{
					if(f[i][j]>f[i][k]+f[k][j]&&f[i][k]+f[k][j]<=k)
					{
						d[i][j]=f[i][k]+d[k][j]-1;
						f[i][j]=f[i][k]+f[k][j];
					}
					if(f[i][j]>k)
						f[i][j]=0x3f;
				}
			}
		}
	}
	for(int i=0;i<n;++i)
	{
		for(int j=i+1;j<n;++j)
		{
			d[i][j]=d[i][j]+k-f[i][j];//将未使用完的k-f[i][j]个点加入,扩展序列长度
		}
	}
	int final=0;
	for(int i=0;i<n;++i)
	{
		for(int j=i+1;j<n;++j)
		{
			if(d[i][j]>final)
			{
				final=d[i][j];
			}
		}
	}
	cout<<final;
	return 0;
}

思路应该没什么问题,但是答案差点

2023/8/4 07:35
加载中...