调试时不知为何将i初始值改成2了,惊奇的发现我的答案与样例差1,于是+1过了所有样例。。。。。。
然后洛谷15分,小图灵35分。。。。。。
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll read(){
ll X = 0 ; int f = 1;
char ch = getchar();
while(!isdigit(ch) && ch != '-') ch = getchar();
if(ch == '-'){
ch = getchar();
f = -1;
}
while(isdigit(ch)){
X = (X<<1)+(X<<3)+ch-'0';
ch = getchar();
}
return X*f;
}
const int N = 510;
int n,k;
struct node{
ll x, y;
}a[N];
ll f(node x,node y){
return y.x-x.x+y.y-x.y;
}
bool cmp(node x,node y){
if(x.x == y.x) return x.y < y.y;
return x.x <y.x;
}
ll dp[N][N],ans=1;
int main(){
//freopen("point.in","r",stdin);
//freopen("point.out","w",stdout);
n = read(); k = read();
for(int i=1;i<=n;i++){
a[i].x = read(); a[i].y = read();
}
sort(a+1,a+1+n,cmp);
for(int i=2;i<=n;i++){
dp[i][0] = 1;
for(int l=0;l<=k;l++)
for(int j=1;j<i;j++){
if(a[i].y < a[j].y) continue;
ll d = f(a[j],a[i])-1;
if(l+d>k) continue;
dp[i][l+d] = max(dp[i][l+d],dp[j][l]+d+1);
ans = max(ans,dp[i][l+d]+k-l-d+1);
}
}
cout << ans;
return 0;
}
我的 AK,不。。。。。。