[GESP202312 七级] 纸牌游戏

GESP编程共123题,本题是整站第1391题,已经有人完成了本题,加油!

题目描述

你和小杨在玩一个纸牌游戏。

你和小杨各有 3 张牌,分别是 0、1、2 。你们要进行 N 轮游戏,每轮游戏双方都要出一张牌,并按 1 战胜 0,2 战胜 1,0 战胜 2 的规则决出胜负。第 i 轮的胜者可以获得 2×ai​ 分,败者不得分,如果双方出牌相同,则算平局,二人都可获得 ai​ 分(i=1,2,…,N) 。

玩了一会后,你们觉得这样太过于单调,于是双方给自己制定了不同的新规则。小杨会在整局游戏开始前确定自己全部 n 轮的出牌,并将他的全部计划告诉你;而你从第 2 轮开始,要么继续出上一轮出的牌,要么记一次“换牌”。游戏结束时,你换了 t 次牌,就要额外扣 b1​+…+bt​ 分。

请计算出你最多能获得多少分。

输入格式

第一行一个整数 N,表示游戏轮数。

第二行 N 个用单个空格隔开的非负整数 a1​,…,aN​ ,意义见题目描述。

第三行 N−1 个用单个空格隔开的非负整数 b1​,⋯,bN−1​ ,表示换牌的罚分,具体含义见题目描述。由于游戏进行 N 轮,所以你至多可以换 N−1 次牌。

第四行 N 个用单个空格隔开的整数 c1​,,⋯,cN​ ,依次表示小杨从第 1 轮至第 N 轮出的牌。保证 ci​∈0,1,2 。

输出格式

一行一个整数,表示你最多获得的分数。

输入输出样例

输入 #1

4
1 2 10 100
1 100 1
1 1 2 0

输出 #1

219

输入 #2

6
3 7 2 8 9 4
1 3 9 27 81
0 1 2 1 2 0

输出 #2

56

说明/提示

样例解释 1

你可以第 1 轮出 0,并在第 2,3 轮保持不变,如此输掉第 1,2 轮,但在第 3 轮中取胜,获得 2×10=20 分;

随后,你可以在第 4 轮中以扣 1 分为代价改出 1 ,并在第 4 轮中取得胜利,获得 2×100=200 分。

如此,你可以获得最高的总分 20+200−1=219。

数据范围

对于 30% 的测试点,保证 N<=15。

对于 60% 的测试点,保证 N<=100。

对于所有测试点,保证 N≤1,000;保证 0≤ai​,bi​≤10^6。

别灰心,再试一次!

真题解析

【解题思路】考虑使用dp算法,设dp[i][j][k]表示前i轮中,第i轮出的牌为j(0<=j<=2),已经换过k次牌的最大得分,则

上面一行表示当前轮出牌和上一轮相同

下面一行表示不同,需要额外付出b[k]的代价

最终答案为 

【参考程序】

本站题目仅供学习,GESP版权归CCF所有,如有侵权请联系删除。站长陈老师QQ及微信:208234。