题解:洛谷 P11452([USACO24DEC] Cake Game S)
1. Description
现在有 \(n\) 个蛋糕排成一列,两头奶牛将交替进行以下操作直到只剩下一个蛋糕为止:
- Bessie 选择两个相邻的蛋糕并将它们堆叠起来,制造大小为两者大小之和的一个新蛋糕。
 - Elsie 选择最左边或最右边的蛋糕藏起来。
 
然后 Bessie 将吃掉最后一个蛋糕,Elsie 将吃掉她藏起的所有蛋糕。
现在由 Bessie 先进行操作,当两头奶牛都采用最优策略时,两头奶牛各能吃掉多少蛋糕?
tips:\(n\) 一定是偶数。
2. Solution
看似是一道博弈题,其实先手的 Bessie 根本没有对于局势的决定权,这个结论很有意思,我们来看看为什么。
首先显然的,Bessie 可以吃到 \(\frac{n} 2+1\) 个蛋糕,Elsie 可以吃到 \(\frac{n} 2-1\) 个蛋糕,为了达到这个目标,Bessie 必须保证自己堆叠的蛋糕不被吃掉。
这就延伸出了下一个结论,Bessie 的选择看似有很多,实际上只有一种,就是在 Elsie 的“步步紧逼”下保证自己堆叠的大蛋糕不被吃掉。因为如果 Bessie 堆叠的蛋糕被吃掉了,那么就相当于自己浪费了若干次机会,还让 Elsie 节省了若干次机会,这显然很亏。
而为了防止自己堆叠的蛋糕被吃,第一回合,Bessie 只能堆叠第 \(\frac n2\) 和第 \(\frac n2+1\) 个蛋糕,接下来的回合,Elsie 藏起哪边的蛋糕,Bessie 只能向反方向逃窜。
所以,Elsie 可以吃掉左右两边最大的 \(\frac n2-1\) 个蛋糕, 只需要找到最大的选择即可。
3. Code
/*by qwer6*/
/*略去缺省源和快读快写*/
const int N=5e5+5;
int n,len,ans;
int pre[N];
signed main(){
	int t;
	read(t);
	while(t--){
		read(n);
		for(int i=1;i<=n;i++)pre[i]=pre[i-1]+read();
		len=n/2-1;
		ans=0;
		for(int i=0;i<=len;i++)tomax(ans,pre[i]+pre[n]-pre[n-len+i]);
		write(pre[n]-ans),Spa,write(ans),Nxt;
	}
}

                
            
浙公网安备 33010602011771号