比赛 CSP2022普及组 评测结果 TTTTTTTTTTTTTTTTTTTT
题目名称 上升点列 最终得分 0
用户昵称 zzafanti 运行时间 20.000 s
代码语言 C++ 内存使用 6.94 MiB
提交时间 2022-10-29 16:23:42
显示代码纯文本
#include<bits/stdc++.h>

using namespace std;

typedef long long ll;
typedef unsigned long long ull;
typedef unsigned int UI;

int read(){
    int sgn=0,x=0;
    char c=getchar();
    while(!isdigit(c)) sgn|=(c=='-'),c=getchar();
    while(isdigit(c)) x=x*10+c-'0',c=getchar();
    return sgn?-x:x;
}

const int N=510;

struct points{
    int x,y;
}p[N];

int n,k;

int g[N][N],f[N][110];

bool cmp(points a,points b){
    return a.x==b.x?a.y<b.y:a.x<b.x;
}

void init(){
    for(int i=1; i<=n; i++){
        for(int j=1; j<=n; j++){
            g[i][j]=abs(p[i].x-p[j].x)+abs(p[i].y-p[j].y)-1;
        }
    }
}

int main(){

    n=read(),k=read();
    for(int i=1; i<=n; i++){
        p[i].x=read(),p[i].y=read();
    }

    sort(p+1,p+1+n,cmp);

   // for(int i=1; i<=n; i++){
   //     cout<<p[i].x<<" "<<p[i].y<<endl;
   // }

    init();

    for(int i=0; i<=k; i++) f[1][i]=i+1;

    for(int i=2; i<=n; i++){
        f[i][0]=1;
        for(int j=1; j<i; j++){
            if(p[j].y>p[i].y) continue;
            if(p[j].x>p[i].x) continue;
            for(int l=g[i][j]; l<=k; l++){
                f[i][l]=max(f[i][l],f[j][l-g[i][j]]+g[i][j]+1);
            }
        }
    }

   // for(int i=1; i<=n; i++){
    //    for(int j=0; j<=k; j++){
    //        cout<<i<<' '<<j<<' '<<f[i][j]<<endl;
   //     }
   // }

    int ans=0;
    for(int i=1; i<=n; i++) ans=max(ans,f[i][k]);

    printf("%d\n",ans);

    return 0;
}