三年OI一场空
查看原帖
三年OI一场空
537627
_LSA_楼主2022/11/7 16:28

调试时不知为何将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,不。。。。。。

2022/11/7 16:28
加载中...