40pts WA 求条
查看原帖
40pts WA 求条
639198
Steve_xh楼主2024/10/12 18:37
#include<bits/stdc++.h>
using namespace std;
struct point{
    int x,y;
    bool operator<(point o) const{
        if(x==o.x)
            return y<o.y;
        return x<o.x;
    }
}a[505];
int n,k,f[505][105],ans=0;//f[i][j]: 推到i,剩余j
inline int getk(point x,point y){// x与y联系至少需要加的点数
    return abs(y.x-x.x)+abs(y.y-x.y)-1;
}
signed main(){
    memset(f,0,sizeof(f));
    scanf("%d%d",&n,&k);
    for(int i=1;i<=n;i++)
        scanf("%d%d",&a[i].x,&a[i].y);
    sort(a+1,a+n+1);
    // for(int i=1;i<=n;i++)
        // cerr<<a[i].x<<" "<<a[i].y<<'\n';
    for(int i=1;i<=n;i++){
        f[i][k]=1;
        for(int t=0;t<=k;t++)
            for(int j=1;j<i;j++){
                if(a[j].x>a[i].x||a[j].y>a[i].y)
                    continue;
                int d=getk(a[i],a[j]);
                if(t+d<=k)
                    f[i][t]=max(f[i][t],f[j][t+d]+d);
            }
    }
    // for(int i=1;i<=n;i++,cerr<<'\n')
        // for(int j=0;j<=k;j++)
            // cerr<<f[i][j]<<" ";
    for(int i=1;i<=n;i++)
        for(int j=0;j<=k;j++)
            ans=max(ans,f[i][j]+j);
    printf("%d",ans);
    return 0;
}
2024/10/12 18:37
加载中...