P2392 kkksc03考前临时抱佛脚:01背包思想 对于一个问题,一个子问题有两种选择,都可以采用01背包思想,由于本人对dp不是很熟练,因此采用dfs + 剪枝。由于左右脑可以同时计算两个题,,因此可以想到,每个题都有分给左脑还是右脑两种选择。
背包问题变形题:熟练使用三种背包模板 求把所有钱花的剩最少的情况下,有几种点菜方式,因此还是01背包,f [ i ] [ j ]表示处理到第i个物品,剩余体积为j时,不过里面存储的是点菜的方式。本题要求箱子里放东西,箱子的最小剩余空间,也就是求他的最大可装重量,因此可以。,即f [ i ] [ j ] 表示箱子可装最大的重量。每种菜都有选和不选两种情况。选和不选两种情况的方法数之和。把物体的重量当作他的价值。1-P1049 装箱问题。2-P1164 小A点菜。
P1002 过河卒:图论动态规划入门 本题与之前的动态规划不一样,比如背包问题和子序列问题等都是线性dp,也就是dp数组其实主要用于存储计算的结果,而这题中的dp数组除了存储结果外,还有。在贴一个dfs的代码,过了40/100,其他的超时了。
7-字串简写:前缀和+滑块思想的学习 两个指针,一个begin,一个end,都 = 0,然后end往后走,自己一直自加,直到满足/不满足条件时(根据check函数设计),进行处理,然后begin+1,之后end再往后走,重复。不过我感觉这题不太适合滑动窗口,有点难理解。
动态规划总结:7种dp + 模板 f [ i ] 表示以第i个数为结尾,最长的上升子序列个数。然后对i之前的数进行遍历,以此求出f [ i ]动态规划是从暴力dfs慢慢优化出来的算法,以本篇入门了解dp思想,之后再系统学习各类。f [ i ] [ j ] 表示在选到第 i 个物品,背包剩余体积为 j 时的最大总价值。本题有两种状态表示的方法,将其分类为a[ i ] 与 b[ i ] 是否相等更便于理解。本篇文章主要总和动态规划中常见类型的模板,详细的讲解在每个知识点下的链接中。最长上升子序列 ( LIS )最长公共子序列(Lcs)
3-冶炼金属:比二分更简单的双指针 从题可以看出,答案一定在1 ~ 最大转换率之间,这个最大转换率是其中一个冶炼金属方式的,可以在输入时直接找出。可以想象出满足条件的一定在1 ~ 最大转换率中,如下图所示,只要找到左右边界输出即可,因此可以考虑。的思路(二分学习中常用思路)出发。
二分查找:万能模板及详细例题 将木头按长度l切,使所有的木头切完后可以正好有k段,l越大越好,因此本题应该从l出发,枚举每种l的可能,找到恰好是不满足题意的那个点。:int: 2的30次方 long long:2的60次方,因此count需要开long long。要找到x的起始位置和结束位置,也就是要找到第一个不 x。思路:转换为A = B + C,枚举B,然后在数组中找A是否存在。方法1:枚举搬走哪块石头,但选择太多,一定会超时。方法2:枚举答案,即枚举最小跳跃距离,二分答案例题5:P2678-跳石头。
石子合并与果子合并:区间动态规划和贪心 思路:本题为区间合并经典例题,平时思路为,如何将两个两个石子分别合并(递归,从上向下),而在区间合并中,应从结尾出发,将整堆石子分为两堆,再对这两堆继续分,直到分为一个个的石子(递推,从下向上)在区间dp遍历时,先遍历区间长度,再遍历区间左节点。
最短编辑距离:递推公式详解 修改这一位之前,a[1~(i-1)]应该与b[1~(j-1)]匹配。所以删除之前a[1~(i-1)]和b[1~j]匹配。那填之前a[1~i]和b[1~(j-1)]匹配。a [1 ~ i] 变得和 b[i ~ j ]相等需要的操作次数。:把a[ i ]删掉之后a[1~ i ]和b[1 ~ j]匹配。:插入之后a[i]与b[j]完全匹配,所以插入的就是b[j]现在请你求出,将 A 变为 B 至少需要进行多少次操作。具体分析过程见下图(图源自y总)f[ i ] [ j ] 表示。一定要考虑a或b为空的情况。
多重背包的动态规划:暴力dfs + dp + dp优化 本题可以当作完全背包问题的变形,在暴力时候用一个数组进行记忆化存储,在判断第 index 个物品存放的个数时,可以在dfs参数上加一个cnt用于计数,也可以直接用一个for循环。方法三:dp优化,一维数组。方法二:二维数组dp。
从01背包开始动态规划:暴力解法 + dp + 滚动数组 + dp优化 如何直接将滚动数组的g删去,会导致 f 的更新错误,因为在更新 f [ j ] 时,f [ j - v [ i ] ] 已经更新过,也就是他在第 i 层,而更新时需要的是第 i - 1 层的数据,如下图:(下两图来源于b站up,一只会code的小金鱼)本题用两个数组来存储,其中 f 在更新前(memcpy(f , g , sizeof f))表示第 i - 1层的数,而 g 表示第i层的数,每一层完成后,对 f 进行更新。不选时,f [ i ] [ j ] 不变。方法四:dp优化,用一个数组存储。