请问蒟蒻区间dp代码怎么假了
查看原帖
请问蒟蒻区间dp代码怎么假了
494192
ChickenDrinkingMilk楼主2023/9/4 22:48
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
const int N=600;
int n,k,dp[N+5][N+5],ans;
struct node{
	int x,y;
}a[N+5];
bool cmp(node u,node v){
	if (u.y==v.y) return u.x<v.x;
	return u.y<v.y;
}
int dis(node u,node v){
	return abs(u.x-v.x)+abs(u.y-v.y)-1;
}
int main(){
	ios::sync_with_stdio(0);
	cin>>n>>k; ans=k+1;
	for (int i=1;i<=n;i++) cin>>a[i].x>>a[i].y;
	sort(a+1,a+n+1,cmp);
//	cout<<'\n';
//	for (int i=1;i<=n;i++) cout<<a[i].x<<' '<<a[i].y<<'\n';
	for (int len=2;len<=n;len++)
		for (int l=1;l+len-1<=n;l++){
			int r=l+len-1;
			dp[l][r]=N;
			if (a[l].x>=a[r].x) continue;
			dp[l][r]=dis(a[l],a[r]);
			for (int p=l+1;p<r;p++)
				dp[l][r]=min(dp[l][r],dp[l][p]+dp[p][r]);
			ans=max(ans,(k-dp[l][r])+dis(a[l],a[r])+2);
		}
//	for (int l=1;l<=n;l++)	
//		for (int r=l+1;r<=n;r++){
//			cout<<l<<' '<<r<<' '<<dp[l][r]<<'\n';
//		}
	cout<<ans;
}
2023/9/4 22:48
加载中...