30pts求调
查看原帖
30pts求调
578251
craft_07楼主2024/5/29 16:35
#include <iostream>
#include <algorithm>

using namespace std;

struct Node {
	int x,y;
}no[503];
bool cmp(Node x,Node y){
	if(x.x!=y.x) return x.x<y.x;
	return x.y<y.x;
}
int dp[503][103];

int main() {
	
	int n,_k;
	scanf("%d%d",&n,&_k);
	for(int i=1;i<=n;i++)
		scanf("%d%d",&no[i].x,&no[i].y);
//	for(int i=1;i<=n;i++)
//		for(int j=_k;j>=0;j--)
//			dp[i][j]=dp[i][j+1]+1;
	
	sort(no+1,no+n+1,cmp);
	
	for(int i=1;i<=n;i++) {
		for(int j=i+1;j<=n;j++) {
			for(int k=_k;k>=0;k--) {
				int dx=abs(no[j].x-no[i].x);
				int dy=abs(no[j].y-no[i].y);
				if(no[j].x<no[i].x||no[j].y<no[i].y) continue;
				int d=dx+dy;
				if(d<=k+1) dp[j][k-d+1] = max( dp[i][k]+d,dp[j][k-d+1] );
			}
		}
	}
	int ans=0;
	for(int i=1;i<=n;i++)
		for(int j=0;j<=_k;j++){
			ans = max(ans,dp[i][j]+j);
		}
	printf("%d",ans+1);
	
	return 0;
}
2024/5/29 16:35
加载中...