50pts求助!!!
查看原帖
50pts求助!!!
965313
youth191954楼主2024/8/8 19:11
#include<bits/stdc++.h>
using namespace std;
const int mx=5e5+5;
int l=1,r=mx*2,d,n,k,juli[mx],sum[mx],dp[mx]; 
bool check(int g){
	int minn=max(1,d-g);
	int maxx=d+g;
	memset(dp,-1,sizeof(dp));
	dp[0]=0;
	for(int i=1;i<=n;i++){
		for(int j=0;j<=i-1;j++){
			if(juli[i]>=juli[j]+minn&&juli[i]<=juli[j]+maxx){
				dp[i]=max(dp[i],dp[j]+sum[i]);
			} 
		}
		if(dp[i]>=k)return true;
	}
	return false;
}
int main(){
	cin>>n>>d>>k;
	for(int i=1;i<=n;i++){
		cin>>juli[i]>>sum[i];
	}
	while(l<=r){
		int mid=(l+r)/2;
		if(check(mid)){
			r=mid-1;
		}
		else{
			l=mid+1;
		}
	}
	cout<<l;
	return 0;
}

二分+动规

2024/8/8 19:11
加载中...