CF731E Funny Game


传送门

思路

由于双方的操作后,操作后都是将操作数的和在放回去,所以可以用前缀和先处理了一下数组。

双方都想自己的分值比对方尽量大,所以第一个人一定拿的是最优。否则,对方拿了剩下的最优,再剩下的就一定不是最优的了。那么,我们可以第一次就使得利益最大化。

我们可以逆着遍历,不断的求计算的数和前缀和差的最大值(尽量使自己比对方的分值大)最后输出即可。

代码

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
const int o_o=200001;//注意数据范围 
int n,n_i,a_s,a_a[o_o];
int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        scanf("%d",&n_i);//读入数列 
    a_a[i]=a_a[i-1]+n_i;//预处理,求前缀和 
    }
    a_s=a_a[n];//赋初值,要逆着遍历保证最优情况 
    for(int i=n-1;i>=2;i--)a_s=max(a_s,a_a[i]-a_s);//注意:最少选两个数注意边界 
    printf("%d",a_s);//输出结果 
    return 0;
}

文章作者: 王大神——A001
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 王大神——A001 !
  目录