MLE求救!
查看原帖
MLE求救!
498049
Doctor_zhc楼主2021/10/16 21:27
#include<bits/stdc++.h>
using namespace std;
struct node{
	long long poi,dis;
};
long long n,d,k,ans=-1;
node a[50000001];
long long f[50000001];
bool check(int x){
	int mb=x+d;int lb=d-x;
	if(lb<=0)
		lb=1;
	memset(f,-127,sizeof(f));
	f[0]=0;
	for(int i=1;i<=n;i++)
		for(int j=i-1;j>=0;j--){
			if(a[i].dis-a[j].dis<lb) continue;
			if(a[i].dis-a[j].dis>mb) break;
			f[i]=max(f[i],f[j]+a[i].poi);
			if(f[i]>=k)
				return 1;
		}
	return 0;
}
int main(){
	scanf("%d%d%d",&n,&d,&k);
	for(int i=1;i<=n;i++)
		scanf("%d%d",&a[i].dis,&a[i].poi);
	int left,right=20001;
	while(left<=right){
		int mid=(left+right)/2;
		if(check(mid)){
			right=mid-1;
			ans=mid;
		}
		else
			left=mid+1;
	}
	printf("%d",ans);
	return 0;
}
2021/10/16 21:27
加载中...