
动态规划
文章平均质量分 68
Brokenrivers
这个作者很懒,什么都没留下…
展开
-
291. 蒙德里安的梦想 + 91. 最短Hamilton路径 状态压缩dp
本题的主要思路是,首先发现,要想满满当当的覆盖大矩形,那么横着摆放的长方形确定了,竖着摆放的也会确定。,此时横着摆放完的空白行在每一列必定是长度为偶数的。状态压缩dp,总而言之就是将本来很复杂的状态,表示成二进制的形式,然后进行状态转移。所以去求横着摆放,且满足条件的状态有多少种就行。dp的思路在注释种,还是很复杂的。............原创 2022-08-14 21:10:30 · 222 阅读 · 0 评论 -
AcWing 899. 编辑距离 线性dp
分两种,如果a当前字符不同于b的当前字符,那么替换成和b相同的,两者抵消,子问题变成求dp[i-1][j-1]。如果本来两字符就相同那么直接抵消,不需要操作。对于每个字符串的编辑距离。对a,b .设dp[i][j]表示a的前i个字符变成b的前j个字符需要的操作。插入一个与b当前字符相同的字符最优,相当于抵消了一个b的字符,子问题变成。很好的练习dp状态计算的题。当前i-1与b的j个字符匹配。最后不要忘记了边界处理,...原创 2022-08-14 17:09:08 · 184 阅读 · 0 评论 -
P1018 [NOIP2000 提高组] 乘积最大 线性dp/记忆化搜索
这题输入数据很小,但是结果很大需要高精度,就用Python写了。子问题其实很好看出来,但是我最开始思考的状态是将序列划分为所有子段然后合并,这个用python切片很好实现。,但是不满足无后效性,然后就wa了。实际上子状态看作前n个元素的最大乘积就行了。......原创 2022-08-11 18:44:50 · 327 阅读 · 0 评论 -
8.10 线性DP练习
看到子序列和相邻可以想到动态规划,类比最长上升子序列的做法,可以枚举之前所有符合转移条件的状态进行比较然后对值最大的进行转移。但是这题数据量1e5不可能n^2的枚举了,但是发现本题的k很小,想到先用hash存储先前的数据然后由k枚举前面所有符合要求的位置,然后转移即可。想到使用动态规划,设dp[ j ][ i ]表示以arr[j]结尾,且当前元素为奇或偶的最长子段和。求所有子段的最大和。设dp为前n个元素的子数组能否每个都满足题目要求,则当前符合要求子数组和该子数组之前都符合要求,那么当前的数组符合要求。.原创 2022-08-10 21:30:26 · 173 阅读 · 0 评论 -
最大正方形 动态规划/二维前缀和
这题的正解是动态规划,首先需要找到一个合适的状态,这个状态肯定是要与每点的情况相关。对于(i,j)点,要满足他左上方为交错矩阵,首先他必须先和周围三个点构成交错,然后才能进行转移。虽然是到经典的dp题,但是这题我第一反应是用二维前缀和,因为数据量太小了,而且要求矩阵全是1也就是矩阵的和确定了。一个点的状态由周围三个点转移而来,并多其拓展一个边长,而且要满足题目,则对周围取最小值。此题作为上一题的进阶,多了交错这个条件,所以跟矩阵和无关了,不能使用前缀和了。...原创 2022-07-22 15:34:03 · 224 阅读 · 0 评论 -
[AHOI2001]质数和分解 && CF414B Mashmokh and ACM ...dp计算方案数
假设我们已知一个数以下的所有素数,那么很明显这题就变成了一道完全背包问题。因为素数可以重复使用,总和要为n。设dp[i][j]为最大元素为i数列长度j的方案数。设dp[i]为拼成i的方案数,x为素数。很容易看出题目有两个状态,数列最大元素和数列长度。但是因为直接枚举因数会超时,所以试着反过来。但是还要注意初始条件才能递推。...原创 2022-07-20 23:14:44 · 185 阅读 · 0 评论 -
6.19 训练周记
这周主要还是学习线性dp,但是因为考试这周练习确实不多。还是把一些练习和基本的背包问题整理一下。最朴素的写法是把物品数放入递推过程中一起递推了,虽然一维优化后思路上仍然如此,但是没必要在在dp数组里加入物品数。我们可以把物品数优化,让体积从0-v每层外循环刷新一次dp数组(当前体积的最优解),但即使是把物品数优化dp数组化为一维,外层循环一样起到了枚举每一个背包体积的对应物品数的状态。直白点说,我们还是比较的同一体积下随着物品数增加最优解对应的变化,如果当前的体积下的最优解比下一次外循环(物品数变化)大,我原创 2022-06-20 09:37:34 · 227 阅读 · 0 评论 -
第十二届山东省ICPC大学生程序设计竞赛 K 硬币
我不知道怎么说了...不是说我看不出是完全背包问题也不是不会写完全背包,可能是我当时脑子已经转不动了,队友提醒叫我写dp的时候我脑子里想的是每次询问跑一遍dp,然后我就指着数据1e5的询问次数说这个数据怎么可能写dp,时间肯定爆了錒 ... 现在回来看我当时真是脑子有问题,开头直接完全背包n^2打表不就行了,后面询问直接O(1)...这题加上那个H题感觉真是对不起队友錒... K-Coins_“山大地纬杯”第十二届山东省ICPC大学生程序设计竞赛(正式赛) (nowcoder.com) 相当于物品数为4的完原创 2022-05-31 20:36:37 · 182 阅读 · 1 评论 -
21山东省赛DGH
一. D Dyson Box In the only example, the inside of the box is as below, and the bold lines mark the outline of all the cubes.After the 111-st event:After the 222-nd event:After the 333-rd event:After the 444-th eve原创 2022-05-01 19:36:43 · 212 阅读 · 0 评论 -
P4933 大师 线性dp总结
P4933 大师 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)常用的解题步骤:第一步:确定子问题。对于本题子问题即为当前有i个塔,他的方案数为多少。第二步:确定状态:这部非常重要,一个好的状态描述可以让你更容易想出状态转移 ,但是也很困难,需要仔细考虑。根据子问题来确定。找出可以描述每个状态的变量,本题的状态由以 i 塔结尾的公比为 d 的等差数列 描述。dp[j][d]表示以第 j 个塔结尾公差为 d 的等差数列方案数。第三步:推到出状态转移方程,...原创 2022-04-24 21:52:49 · 311 阅读 · 0 评论 -
4.11 周练 dp和搜索选集
1.P2758 编辑距离线性dp这题主要难点是这三个步骤如何转换为状态转移。首先我们先确定状态,因为有两个字符串要进行匹配,首先会想到最长公共子序列问题,因为一个主串a要匹配成b,那么a的每一个子串都要与b的每一个子串匹配。所以设dp[j][i]表示长度为j的a串要变成长度i的b串需要的最少步骤。也就是说此时的a子串完全等于此时的b子串再来分析每个操作:首先我们可以不进行操作,但是不操作又要保证a与b串匹配,只能当前a的字符与b的字符相同。才能匹配。所以当a[j]==a[i]时即可不..原创 2022-04-17 17:20:24 · 355 阅读 · 0 评论 -
P1280 尼克的任务 反向线性dp
P1280 尼克的任务 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)思路刚开始看说实话没啥思路,因为从某个时间开始选择的每个任务都会影响下一个的任务选择,不知道该如何确定状态属性。最后想到,既然从前开始考虑每个时间该选择什么任务会影响下一个任务的选择,那么只要反向计算不就解决了这个问题吗?如果反着看,这个问题就变成了一个类似完全背包的问题。如果当前的时间是j,如果是正向计算的话,则dp[j]表示 j时间之前的最大空闲时间。但是j之后的任务选择就被j-1的选择给限制了,..原创 2022-04-09 19:47:56 · 343 阅读 · 0 评论 -
最长公共子序列LCS和 最长单调子序列 及其二分优化
最长公共子序列LCS和最长上升子序列LIS都是动态规划的经典例题,再度回顾这两个例题,已经有了更深一些的理解和优化方式。这里系统整理一下 。一.最长单调子序列1.最长上升子序列最朴素的dp思路,就是对一个序列a[i],设一个dp数组, 其中dp[i]的含义为以a[i]结尾的最长上升子序列的长度。那么我们考虑当前的a[i]与与a[i]之前的元素的关系,如果当前的a[i]与a[i]之前的a[j]满足递增关系,那么dp[i]的状态可以由dp[j]得到,对每个先前状态取最值即为当前状态的最.原创 2022-04-07 00:06:38 · 2423 阅读 · 0 评论 -
p1164 小a买菜 动态规划求解方案数
题目描述不过uim由于买了一些书,口袋里只剩M元((M≤10000)。餐馆虽低端,但是菜品种类不少,有NN种(N \le 100)(N≤100),第i种卖ai元(ai≤1000)。由于是很低端的餐馆,所以每种菜只有一份。小A奉行“不把钱吃光不罢休”,所以他点单一定刚好把uim身上所有钱花完。他想知道有多少种点菜方法。由于小A肚子太饿,所以最多只能等待1秒。输入格式第一行是两个数字,表示N和M。第二行起N个正数ai(可以有相同的数字,每个数字均在1000以内)。输出格式原创 2022-01-29 15:41:19 · 907 阅读 · 0 评论 -
01背包 记忆化搜索解法
有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。第 i件物品的体积是 vi,价值是 wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行两个整数N,V,用空格隔开,分别表示物品数量和背包容积。接下来有 N行,每行两个整数vi,wi,用空格隔开,分别表示第 i件物品的体积和价值。输出格式输出一个整数,表示最大价值。数据范围0<N,V≤10000<vi,wi≤1000输入样例4 5原创 2022-01-04 16:23:33 · 1550 阅读 · 0 评论 -
多重背包问题 动态规划入门
有 N 种物品和一个容量是 V的背包。第 ii 种物品最多有 si 件,每件体积是 vi,价值是 wi。求解将哪些物品装入背包,可使物品体积总和不超过背包容量,且价值总和最大。输出最大价值。输入格式第一行两个整数N,V,用空格隔开,分别表示物品种数和背包容积。接下来有 N 行,每行三个整数vi,wi,si,用空格隔开,分别表示第 i 种物品的体积、价值和数量。输出格式输出一个整数,表示最大价值。数据范围0<N,V≤1000<vi,wi,si≤100输入原创 2022-01-03 23:05:03 · 103 阅读 · 0 评论 -
最长上升子序列(1) 动态规划入门
给定一个长度为 N的数列,求数值严格单调递增的子序列的长度最长是多少。输入格式第一行包含整数 N。第二行包含 N 个整数,表示完整序列。输出格式输出一个整数,表示最大长度。数据范围1≤N≤1000,输入样例:73 1 2 1 8 5 6输出样例:4#include <iostream>#include<math.h>#include<string>#include<vector>#inc原创 2022-01-02 15:42:22 · 442 阅读 · 0 评论 -
洛谷 P1434 滑雪 记忆化搜索
题目描述Michael 喜欢滑雪。这并不奇怪,因为滑雪的确很刺激。可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。Michael 想知道在一个区域中最长的滑坡。区域由一个二维数组给出。数组的每个数字代表点的高度。下面是一个例子:1 2 3 4 516 17 18 19 615 24 25 20 714 23 22 21 813 12 11 10 9一个人可以从某个点滑向上下左右相邻四个点原创 2022-01-01 18:41:51 · 258 阅读 · 0 评论 -
完全背包问题 dp及记忆化搜索
669 · 换硬币给出不同面额的硬币以及一个总金额. 写一个方法来计算给出的总金额可以换取的最少的硬币数量. 如果已有硬币的任意组合均无法与总金额面额相等, 那么返回 -1.你可以假设每种硬币均有无数个总金额不会超过10000硬币的种类数不会超过500, 每种硬币的面额不会超过100样例1输入:[1, 2, 5]11输出: 3解释: 11 = 5 + 5 + 1样例2输入: [2]3输出: -1分析:确定子问题:主问题,n的总金额用value[ ]面值的原创 2021-12-29 19:58:18 · 783 阅读 · 0 评论 -
01背包 动态规划入门——一维优化和记忆化搜索思路分析
有 N件物品和一个容量是 V 的背包。每件物品只能使用一次。第 i 件物品的体积是 vi,价值是 wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行两个整数,N,V用空格隔开,分别表示物品数量和背包容积。接下来有 N 行,每行两个整数 vi,wi用空格隔开,分别表示第 i 件物品的体积和价值。输出格式输出一个整数,表示最大价值。数据范围0<N,V≤10000<vi,wi≤1000输入样例:..原创 2021-12-29 18:16:41 · 922 阅读 · 1 评论 -
P1216 数字三角形 Number Triangles 动态规划入门和递归及记忆化搜索
题目描述观察下面的数字金字塔。写一个程序来查找从最高点到底部任意处结束的路径,使路径经过数字的和最大。每一步可以走到左下方的点也可以到达右下方的点。 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 在上面的样例中,从7→3→8→7→5的路径产生了最大输入格式第一个行一个正整数rr,表示行的数目。后面每行为这个数字金字塔特定行包含的整数。输出格式单独的一行,包含那个...原创 2021-12-27 12:03:40 · 670 阅读 · 0 评论