10 条题解

  • 0
    @ 2023-3-4 16:22:11
    #include<iostream>
    #include<algorithm>
    using namespace std;
    const int N=501,K=101;
    int n,k;
    struct node{
    	int x,y;
    }a[N];
    int f[N][K];
    bool cmp(node a,node b){
    	if(a.x==b.x){
    		return a.y<b.y;
    	}
    	return a.x<b.x;
    }
    int main(){
    	cin>>n>>k;
    	for(int i=1;i<=n;i++){
    		cin>>a[i].x>>a[i].y;
    	}
    	sort(a+1,a+1+n,cmp);
    	for(int i=1;i<=n;i++){
    		f[i][k]=1;
    		for(int j=0;j<=k;j++){
    			for(int t=1;t<i;t++){
    				if(a[t].x>a[i].x||a[t].y>a[i].y){
    					continue;
    				}
    				int dx=abs(a[i].x-a[t].x);
    				int dy=abs(a[i].y-a[t].y);
    				int d=dx+dy-1;
    				if(j+d>k){
    					continue;
    				}
    				f[i][j]=max(f[i][j],f[t][j+d]+d+1);
    			}
    		}
    	}
    	int ans=0;
    	for(int i=1;i<=n;i++){
    		for(int j=0;j<=k;j++){
    			ans=max(ans,j+f[i][j]);
    		}
    	}
    	cout<<ans<<endl;
    	return 0;
    }
    

    信息

    ID
    2919
    时间
    1000ms
    内存
    256MiB
    难度
    8
    标签
    递交数
    111
    已通过
    36
    上传者