?
查看原帖
?
481621
Zhang_Wenjie楼主2022/11/6 19:23
#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,我有个不解的地方,为什么这个代码已经对 aa 数组进行排序了,还要在循环里加一句if?而且还必须加了才能 AC。

2022/11/6 19:23
加载中...