13910. 珅泽教育CSP-J第一轮模拟考第十九套 第 42 题

珅泽教育CSP-J第一轮模拟考第十九套 第 42 题

完善程序(2):传花取分游戏

两个玩家玩一个游戏,每个人的目标是让自己的总分尽可能多。游戏共有 N=28N=2^8 轮,每轮的分数在游戏开始前给定,依次记为 A0,A1,…,AN−1A_0,A_1,\ldots,A_{N-1}。

每轮游戏中,手上有花的人可以选择:

  • 保留花:把这一轮的分数送给对方;下一轮花仍在自己手上。
  • 取走这一轮的分数:这一轮得分归自己;下一轮花交给对方。

开始时持花的人称为先手。双方都采用最优策略,请补全程序,返回先手能获得的总分。所有分数及累加结果均在 int 范围内。回答第41—45题。

const int N = 1 << 8;
int s[N + 1];

int f(int n)
{
    if (_____(1)_____)
    {
        return 0;
    }
    else
    {
        int flower = f(n-1);
        return std::max(flower, _____(2)_____);
    }
}

int solve(int A[])
{
    s[0] = 0;
    for (int i = 0; i < N; ++i)
    {
        s[_____(3)_____] = s[i] + A[_____(4)_____];
    }
    return f(_____(5)_____);
}

(2)处应填( )。

{{ select(1) }}

  • s[n]
  • s[n-1]
  • s[n] - flower
  • s[n-1] - flower