不理解……
查看原帖
不理解……
403805
_Natural_楼主2023/9/22 23:42

开头不是有排序了吗? 为什么dp里面还要加判断,而且不加还不对?

#include<bits/stdc++.h>
	
	using namespace std;
	struct node{
		int x,y;
	}a[1005];
	int n,k,opt[1005][205]; 
	inline bool tmp(node a,node b){
		if(a.x==b.x) return a.y<b.y;
		return a.x<b.x;
	}
	int main()
	{
		ios::sync_with_stdio(NULL);
		cin>>n>>k;
		for(int i=1;i<=n;i++)
			cin>>a[i].x>>a[i].y;
		sort(a+1,a+n+1,tmp);
		for(int i=1;i<=n;i++){
			for(int j=0;j<=k;j++){
				int num=0;
				for(int s=1;s<i;s++){
					if(a[i].x<a[s].x||a[i].y<a[s].y)
						continue;
					int sum=abs(a[i].x-a[s].x)+abs(a[i].y-a[s].y)-1;
					if(j+sum<=k)
						num=max(num,opt[s][j+sum]+sum+1);
				}
				opt[i][j]=max(1,num);
			}
		}
		int ans=0;
		for(int i=1;i<=n;i++){
			for(int j=0;j<=k;j++){
				ans=max(ans,opt[i][j]+j);
			} 
		}
		cout<<ans;
		return 0;
	}

求助

2023/9/22 23:42
加载中...