区间dp
文章平均质量分 77
yuzhang_zy
现在的我不是最好的我,未来的我才是最好的我,每一篇博客都记录着我的成长
展开
-
321 棋盘分割(高维区间dp)
1. 问题描述:将一个 8×8 的棋盘进行如下分割:将原棋盘割下一块矩形棋盘并使剩下部分也是矩形,再将剩下的部分继续如此分割,这样割了 (n−1) 次后,连同最后剩下的矩形棋盘共有 n 块矩形棋盘。(每次切割都只能沿着棋盘格子的边进行)原棋盘上每一格有一个分值,一块矩形棋盘的总分为其所含各格分值之和。现在需要把棋盘按上述规则分割成 n 块矩形棋盘,并使各矩形棋盘总分的均方差最小。均方差和平均值的公式如下图所示,其中xi为第i块矩形棋盘的的总分,请编程对给出的棋盘及 n,求出均方差的最小值。.原创 2021-09-27 18:05:05 · 283 阅读 · 0 评论 -
479 加分二叉树(区间dp)
1. 问题描述:设一个 n 个节点的二叉树 tree 的中序遍历为(1,2,3,…,n),其中数字 1,2,3,…,n 为节点编号。每个节点都有一个分数(均为正整数),记第 i 个节点的分数为 di,tree 及它的每个子树都有一个加分,任一棵子树 subtree(也包含 tree 本身)的加分计算方法如下: subtree的左子树的加分 × subtree的右子树的加分 + subtree的根的分数 若某个子树为空,规定其加分为 1。叶子的加分就是叶节点本身的分数,不考虑它的空子树。试求一原创 2021-09-26 22:10:24 · 441 阅读 · 0 评论 -
1069 凸多边形的划分(区间dp + 高精度)
1. 问题描述:2. 思路分析:3. 代码如下:因为python一般不会溢出,所以不写高精度也是可以通过的,对于其他的数据类型则需要写高精度,因为10 ^ 9 * 10 ^ 9 * 10 ^ 9 * 50 > 10 ^ 28,不写高精度会造成溢出from typing import List# 高精度写法class Solution: # M为第三维存储的位数, 其中M = 35 # 高精度加法 def add(self, a: List[int原创 2021-09-26 18:14:39 · 571 阅读 · 0 评论 -
1068 环形石子合并(环形区间dp变成链的技巧)
1. 问题描述:将 n 堆石子绕圆形操场排放,现要将石子有序地合并成一堆。规定每次只能选相邻的两堆合并成新的一堆,并将新的一堆的石子数记做该次合并的得分。请编写一个程序,读入堆数n及每堆的石子数,并进行如下计算:选择一种合并石子的方案,使得做 n−1 次合并得分总和最大。选择一种合并石子的方案,使得做 n−1 次合并得分总和最小。输入格式第一行包含整数 n,表示共有 n 堆石子。第二行包含 n 个整数,分别表示每堆石子的数量。输出格式输出共两行:第一行为合并得分总和最小值,第二行为合原创 2021-09-25 16:30:18 · 259 阅读 · 0 评论 -
730 统计不同回文子序列(区间dp)
1. 问题描述:给定一个字符串 S,找出 S 中不同的非空回文子序列个数,并返回该数字与 10 ^ 9 + 7 的模。通过从 S 中删除 0 个或多个字符来获得子序列。如果一个字符序列与它反转后的字符序列一致,那么它是回文字符序列。如果对于某个i,A_i != B_i,那么A_1, A_2, ... 和B_1, B_2, ... 这两个字符序列是不同的。示例 1:输入:S = 'bccb'输出:6解释:6 个不同的非空回文子字符序列分别为:'b', 'c', 'bb', 'c...原创 2021-09-02 21:54:34 · 342 阅读 · 0 评论 -
664 奇怪的打印机(区间dp)
1. 问题描述:有台奇怪的打印机有以下两个特殊要求:打印机每次只能打印由 同一个字符 组成的序列。每次可以在任意起始和结束位置打印新字符,并且会覆盖掉原来已有的字符。给你一个字符串 s ,你的任务是计算这个打印机打印它需要的最少打印次数。示例 1:输入:s = "aaabbb"输出:2解释:首先打印 "aaa" 然后打印 "bbb"。示例 2:输入:s = "aba"输出:2解释:首先打印 "aaa" 然后在第二个位置打印 "b" 覆盖掉原来的字符 'a'。提示:1原创 2021-08-02 16:22:26 · 195 阅读 · 0 评论 -
486 预测赢家(博弈论-区间dp)
1. 问题描述:给定一个表示分数的非负整数数组。 玩家 1 从数组任意一端拿取一个分数,随后玩家 2 继续从剩余数组任意一端拿取分数,然后玩家 1 拿,…… 。每次一个玩家只能拿取一个分数,分数被拿取之后不再可取。直到没有剩余分数可取时游戏结束。最终获得分数总和最多的玩家获胜。给定一个表示分数的数组,预测玩家1是否会成为赢家。你可以假设每个玩家的玩法都会使他的分数最大化。示例 1:输入:[1, 5, 2]输出:False解释:一开始,玩家1可以从1和2中进行选择。如果他选择 2(或者 1 )原创 2021-07-12 21:11:45 · 237 阅读 · 0 评论 -
375 猜数字大小 II(区间dp)
1. 问题描述:2. 思路分析:3. 代码如下:原创 2021-06-19 11:15:57 · 433 阅读 · 0 评论 -
312 戳气球(区间dp)
1. 问题描述:有 n 个气球,编号为0 到 n - 1,每个气球上都标有一个数字,这些数字存在数组nums中。现在要求你戳破所有的气球。戳破第 i 个气球,你可以获得nums[i - 1] * nums[i] * nums[i + 1] 枚硬币。这里的 i - 1 和 i + 1 代表和i相邻的两个气球的序号。如果 i - 1或 i + 1 超出了数组的边界,那么就当它是一个数字为 1 的气球。求所能获得硬币的最大数量。示例 1:输入:nums = [3,1,5,8]输出:1...原创 2021-06-03 21:00:57 · 147 阅读 · 0 评论