题解
2023-07-15 10:24:26
发布于:上海
28阅读
0回复
0点赞
#include<bits/stdc++.h>
using namespace std;
struct node{
int x,y;
};
node d[505];
bool cmp(node a,node b){
if(a.x!=b.x) return a.x < b.x;
else return a.y<b.y;
}
int ds(int i,int h){
return (d[i].x-d[h].x)+abs(d[i].y-d[h].y);
}
int main(){
int n,k;
cin >> n >> k;
for(int i=1;i<=n;i++){
cin >> d[i].x >> d[i].y;
}
sort(d,d+n+1,cmp);
int dp[505][105]={0};
for(int j=0;j<=k;j++){
dp[1][j] = j+1;
}
for(int i=2;i<=n;i++){
for(int j=0;j<=k;j++){
for(int h=1;h<i;h++){
if(d[i].x>=d[h].x&&d[i].y>=d[h].y){
int jl = ds(i,h);
if(jl==1){
dp[i][j] = max(dp[h][j]+1,dp[i][j]);
}else if(jl<=j+1){
dp[i][j] = max(dp[i][j],max(1+j,dp[h][j-jl+1]+(jl-1)+1));
}else{
dp[i][j] = max(1+j,dp[i][j]);
}
}else{
dp[i][j] = max(1+j,dp[i][j]);
}
}
}
}
int rs = 0;
for(int i=0;i<=n;i++){
for(int j=0;j<=k;j++){
rs = max(rs,dp[i][j]);
}
}
cout << rs;
return 0;
}
这里空空如也
有帮助,赞一个