数据水的.....
查看原帖
数据水的.....
556007
taozhiming楼主2022/9/20 16:40

想到一半不想想优化了,看看能不能骗分

先看了看原来的代码:

#include<bits/stdc++.h>
#define fi first
#define se second
#define m_p make_pair
#define PII pair<int,int>
#define int long long
using namespace std;
const int MAXN=1e6+7;
const int INF=1e18+7;
inline int read(){
    int x=0,w=1;
    char ch=getchar();
    for(;ch>'9'||ch<'0';ch=getchar()) if(ch=='-') w=-1;
    for(;ch>='0'&&ch<='9';ch=getchar()) x=x*10+ch-'0';
    return x*w;
}
int n,d,k,x[MAXN],s[MAXN],dp[MAXN];
bool ch(int j,int i,int g)
{
	if (x[i]-x[j]>=d-g&&x[i]-x[j]<=d+g) return 1;
	return 0;
}
bool check(int g)
{
	memset(dp,-0x3f,sizeof(dp));
	dp[0]=0;
	for (int i=1;i<=n;i++)
	{
		for (int j=0;j<i;j++)
		{
			if (ch(j,i,g)) dp[i]=max(dp[i],dp[j]+s[i]);
		}
		if (dp[i]>=k) return 1;
	}	
	return 0;
}
signed main()
{
	cin>>n>>d>>k;
	for (int i=1;i<=n;i++)
		cin>>x[i]>>s[i];
	int l=0,r=1e9+7,ans=0;
	while(l<=r)
	{
		int mid=(l+r)>>1;
		if (check(mid)) r=mid-1,ans=mid;
		else l=mid+1;
	}
	cout<<ans;
	return 0;
}

这个 jj 是从 00 开始枚举的,有问题,改一改

就成了下面这个:


#include<bits/stdc++.h>
#define fi first
#define se second
#define m_p make_pair
#define PII pair<int,int>
#define int long long
using namespace std;
const int MAXN=1e6+7;
const int INF=1e18+7;
inline int read(){
    int x=0,w=1;
    char ch=getchar();
    for(;ch>'9'||ch<'0';ch=getchar()) if(ch=='-') w=-1;
    for(;ch>='0'&&ch<='9';ch=getchar()) x=x*10+ch-'0';
    return x*w;
}
int n,d,k,x[MAXN],s[MAXN],dp[MAXN];
bool ch(int j,int i,int g)
{
	if (x[i]-x[j]>=d-g&&x[i]-x[j]<=d+g) return 1;
	return 0;
}
bool check(int g)
{
	memset(dp,-0x3f,sizeof(dp));
	dp[0]=0;
	for (int i=1;i<=n;i++)
	{
		for (int j=max(0ll,i-30);j<i;j++)
		{
			if (ch(j,i,g)) dp[i]=max(dp[i],dp[j]+s[i]);
		}
		if (dp[i]>=k) 
			return 1;
	}	
	return 0;
}
signed main()
{
	cin>>n>>d>>k;
	for (int i=1;i<=n;i++)
		cin>>x[i]>>s[i];
	int l=0,r=1e9+7,ans=0;
	while(l<=r)
	{
		int mid=(l+r)>>1;
		if (check(mid)) r=mid-1,ans=mid;
		else l=mid+1;
	}
	cout<<ans;
	return 0;
}

然后就过了(狂喜

建议加强数据(((

2022/9/20 16:40
加载中...