开头不是有排序了吗? 为什么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;
}
求助