摘要:
传送门 解题思路 dp[i][j]表示把区间[i...j]涂成目标颜色的最少步骤。 当s[i]==s[j]时,我们可以发现,在涂第i个格子时,我们可以多涂上一格,将第j格涂上;同理,可以在涂第j个格子时,多图一个格子,把第i格涂上。所以就可以从dp[i+1][j]和dp[i][j-1]转移而来。 对 阅读全文
摘要:
传送门 解题思路 用dp[i][j]表示dp[i][j]能否合成一个数,负无穷表示合不成,否则即为合成的数。 然后枚举k,很显然,如果dp[i][k]==dp[k+1][j],dp[i][j]就可以从前面两个转化过来。 最后对所有的任意长度的区间取一个max。 AC代码 1 #include<ios 阅读全文
摘要:
传送门 解题思路 个人感觉难度应该在蓝题左右 (可能是我太弱了趴) 首先我们知道,那个所谓的头标记和尾标记,在合并区间[l...r]时,n和m是确定了的(即l的头标记和r的尾标记),只差中间的r,所以我们可以枚举k(断点)。 然后我们又可以得出,对于合并区间[l...r],最终得分为(dp[i][k 阅读全文
摘要:
传送门 解题思路 对于整个中序遍历,做一遍区间dp: 枚举区间[l...r]内的所有节点作为根节点,然后计算出得分,若比当前的值要大,同时更新dp值和root[l][r](为了输出先序遍历)。 先序是根左右,所以递归输出就好了。 AC代码 1 #include<iostream> 2 #includ 阅读全文