一个长度为 N 的序列 ai ,双方轮流操作
每次的操作是选择一个长度大于 1 的前缀,计算它的和 s ,然后 用 s 替换它的前缀,同时当前玩家获得 s 的分数。
当只剩下一个元素,游戏结束。
双方均想最大化 自己的分数-对手的分数,计算这个值。
输入 #1
3 2 4 8
输出 #1
14
输入 #2
4 1 -7 -2 3
输出 #2
-3
随便搞出来一个dp qwq
const int N=1e6; int n; int a[N],k; int main() { scanf("%d",&n); for(int i=1; i<=n; i++) { int hh; scanf("%d",&hh); a[i]=a[i-1]+hh; } int ans=a[n]; for(int i=n-1; i>=1; i--)k=ans,ans=max(ans,a[i]-k); printf("%d\n",k); return 0; }
原文:https://www.cnblogs.com/Larry-Zero/p/11750229.html