cf731E】的更多相关文章

题意:一个游戏,由n张贴纸组成.贴纸排成一排,并且纸条上标有数字,玩家轮流揭下m张从左到右连续的纸条(m大等2),揭下后玩家得分累加这些纸条的sum,并且在剩下纸条最左边贴上新的纸条,数值为揭下纸条的sum.最后只剩一张纸条时游戏结束.每个玩家的策略是使敌我分差尽可能大.求这个分差. 这道题是那一场最难的题,交的人最少,然而代码只有几行(一个for循环搞定 题解引入了一个"zero-sum game"来阐述这一类游戏,并且说这一类游戏通常用dp解(%%% 我们发现每个状态只跟我们已经取…
题目描述 一个长度为 N 的序列 ai ,双方轮流操作 每次的操作是选择一个长度大于 1 的前缀,计算它的和 s ,然后 用 s 替换它的前缀,同时当前玩家获得 s 的分数. 当只剩下一个元素,游戏结束. 双方均想最大化 自己的分数-对手的分数,计算这个值. 输入输出样例 输入 #1 输出 #1 输入 #2 - - 输出 #2 - 解题思路 随便搞出来一个dp qwq AC Code const int N=1e6; int n; int a[N],k; int main() { scanf("…
简单DP i.May I ask you for a dance(体舞课软广植入) 这题的状态转移方程为:dp[i][j]=max(dp[i-1][j-1]+a[i][j],dp[i][j-1]);(i<=j) 方法1:预处理:将i==j的情况提取出来,因为当i==j的时候,序列顺序是固定的,只能从1选到i(感谢zzdl) 方法2:将i>=j的情况全部赋值为-inf,这样在选取的时候就能够保证i>=j不会被选取 方法3:好感度可能为负值,范围为-100~100:因为dp初始化为0,所以可…