题解 CF859C 【Pie Rules】

· · 题解

我们要先知道,每个人一共有两种操作方式,第 1 种方式是数给自己,决策权给对方,第 1 种方式是数给对方,决策权自己保留。

我的思路就是从 n 递减到 1,开始判断 a 和 b 的大小,决定将当前数加给谁。如果 a 大于等于 b,则将当前数加给 b;否则,将当前数加给 a。

题目中有一句话:

“假定他们都使用最优策略,求他们最后分别能获得多少分。”

就是都为自己想,尽最大的可能争取自己能赢,所以只要 Alice 大于 Bob 就把数加到 Alice 这边,反之,加到 Bob 那边。

应该属于最短的了吧。

附上 AC 代码:

#include<bits/stdc++.h>
using namespace std;
int n,i,c[10005],a,b;
int main(){
cin>>n;
    for(i=1;i<=n;i++){
        cin>>c[i];  
    }
    for(i=n;i>=1;i--){
        if(a>=b) b=b+c[i];//判断他们谁大。
        else a=a+c[i];      
}
cout<<min(a,b)<<" "<<max(a,b);//输出Alice和Bob的最终得分。
}