博弈游戏题目描述两位玩家进行回合制博弈游戏,游戏总计进行 n 轮。每一轮,双方都要从1、2、3三个数字中选择一个出招,胜负规则如下:(1)若双方选择的数字相同,本轮为平局;(2)若数字不同,胜负遵循固定克制关系:1克制2,2克制3,3克制1,被克制的一方本轮落败,克制的一方本轮获胜。其中一位玩家提前掌握了对手的完整出招顺序——对手在第 i 轮选择的数字为 s i ,所有 s i 组成一个长度为 n 的序列。该玩家需要规划自己每一轮的出招,满足以下全部条件:(1)任何一轮都不能落败(即每一轮只能获胜或平局);(2)不能连续两轮选择相同的数字出招;(3)在满足前两个条件的前提下,尽可能多地获得轮次的胜利。请计算该玩家最多能赢得的轮次数量。输入格式第一行:一个整数表示n。第二行:n 个整数,表示s 1 、s 2 、……、s n ,每个数为1、2或3。输出格式输出一个整数,表示玩家最多能赢得的游戏轮数。输入样例#1输出样例#1输入样例#2输出样例#2说明提示:1≤n≤200,000,s i ∈{1,2,3}限制:时间限制:1000ms,内存限制:256MiB
正确答案:参考程序(Python):n=int(input());s=list(map(int,input().split()));beat={1:2,2:3,3:1};dp=[[-1]*4 for _ in range(n)];#win/move。简化:dp[i][last]。核心:DP最大获胜轮数。
试卷来源:202603 青少年等级考试C/C++真题六级