蒟蒻求助,我这个八十分是什么鬼?
查看原帖
蒟蒻求助,我这个八十分是什么鬼?
177838
IGD_XW楼主2020/10/10 18:59
#include<bits/stdc++.h>
using namespace std;
int n,d,k;
int a[500010],b[500010];//a距离,b得分 
int dp[500010];
int read()
{
	int s=0,w=1;
	char ch=getchar();
	while(ch<'0'||ch>'9')
	{
		if(ch=='-') w=-1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9')
	{
		s=s*10+ch-'0';
		ch=getchar();
	}
	return s*w;
}
bool check(int x)
{
	memset(dp,-0x3f,sizeof(dp));
	dp[0]=0;
	for(int i=1;i<=n;i++)
	{
		int maxn=-999999;
		for(int j=i-1;j>=0;j--)
		{
			if(a[i]-a[j]<d-x) continue;
			if(a[i]-a[j]>d+x) break;
			dp[i]=max(dp[i],dp[j]+b[i]);
		}
		if(dp[i]>=k) return 1;
	}
	return 0;
}
int main()
{
	n=read();
	d=read();
	k=read();
	a[0]=0;
	b[0]=0;
	for(int i=1;i<=n;i++)
	{
		a[i]=read();
		b[i]=read();
	}
	int l,r;
	l=0;
	r=a[n];
	int mid;
	int ans;
	while(l<r)
	{
		mid=(l+r)/2;
		if(check(mid))
		{
			ans=mid;
			r=mid;
		}
		else
		{
			l=mid+1;
		}
	}
	cout<<ans;
	return 0;
}
2020/10/10 18:59
加载中...