求hack数据
查看原帖
求hack数据
699471
yuxiaoyu20090104楼主2023/8/17 22:49

50分,求hack

#include<bits/stdc++.h>
using namespace std;
int n,a[5005],f[2][5005];
//f[flag][i]表示当前取数区间为[i,i+len],前一个人最多取到多少
//f[flag][i]=a[i-1]+a[n]-a[i+len]-max(f[flag^1][i-1],f[flag^1][i])
int main()
{
	//freopen("P3004_2.in","r",stdin);
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
		a[i]+=a[i-1];
	}
	int flag=0;
	//f[1][0]=1e9,f[0][0]=1e9;
	for(int len=n-1;len>=0;len--)
	{
		for(int i=1;i+len<=n;i++)
		{
			f[flag][i]=a[n]-a[i+len]+a[i-1]-max(f[flag^1][i],f[flag^1][i-1]);
			//cout<<f[flag][i]<<" ";
			//cout<<a[n]-a[i+len]+a[i-1]<<" ";
		}
		//for(int i=n;i+len>n;i--)f[flag][i]=1e9;
		flag^=1;
		//cout<<endl;
	}
	flag^=1;
	int ans1=1e9,ans2=0;
	for(int i=1;i<=n;i++)
	{
		ans1=min(a[n]-f[flag][i],ans1);
		ans2=max(f[flag][i],ans2);
	}
	if(n&1)printf("%d",ans1);
	else printf("%d",ans2);
	return 0;
}
2023/8/17 22:49
加载中...