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。