自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(46)
  • 收藏
  • 关注

原创 动态规划总结:7种dp + 模板

f [ i ] 表示以第i个数为结尾,最长的上升子序列个数。然后对i之前的数进行遍历,以此求出f [ i ]动态规划是从暴力dfs慢慢优化出来的算法,以本篇入门了解dp思想,之后再系统学习各类。f [ i ] [ j ] 表示在选到第 i 个物品,背包剩余体积为 j 时的最大总价值。本题有两种状态表示的方法,将其分类为a[ i ] 与 b[ i ] 是否相等更便于理解。本篇文章主要总和动态规划中常见类型的模板,详细的讲解在每个知识点下的链接中。最长上升子序列 ( LIS )最长公共子序列(Lcs)

2024-03-26 10:34:17 513

原创 二分查找:万能模板及详细例题

将木头按长度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-跳石头。

2024-03-25 21:00:46 1751

原创 从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优化,用一个数组存储。

2024-03-22 14:56:44 1228

原创 砝码称重:动态规划的bool类型

因此最后的结果直接对最后一个砝码遍历,数有几个true。: 对第i个物品,是否可以称出第j个重量。

2024-04-06 17:31:19 195

原创 P2392 kkksc03考前临时抱佛脚:01背包思想

对于一个问题,一个子问题有两种选择,都可以采用01背包思想,由于本人对dp不是很熟练,因此采用dfs + 剪枝。由于左右脑可以同时计算两个题,,因此可以想到,每个题都有分给左脑还是右脑两种选择。

2024-04-03 12:03:17 206

原创 背包问题变形题:熟练使用三种背包模板

求把所有钱花的剩最少的情况下,有几种点菜方式,因此还是01背包,f [ i ] [ j ]表示处理到第i个物品,剩余体积为j时,不过里面存储的是点菜的方式。本题要求箱子里放东西,箱子的最小剩余空间,也就是求他的最大可装重量,因此可以。,即f [ i ] [ j ] 表示箱子可装最大的重量。每种菜都有选和不选两种情况。选和不选两种情况的方法数之和。把物体的重量当作他的价值。1-P1049 装箱问题。2-P1164 小A点菜。

2024-04-03 10:18:53 584

原创 P1002 过河卒:图论动态规划入门

本题与之前的动态规划不一样,比如背包问题和子序列问题等都是线性dp,也就是dp数组其实主要用于存储计算的结果,而这题中的dp数组除了存储结果外,还有。在贴一个dfs的代码,过了40/100,其他的超时了。

2024-04-02 20:34:11 919

原创 最大子段和

本题为序列问题,采用 f [ i ] 表示以i结尾的最大的序列和。

2024-04-02 19:06:56 177

原创 dfs之排列与组合

组合与排列不同的是组合对于同一种选择,只需要输出一次,不用输出不同顺序,因此每次dfs只需要从上一个数字后进行处理。今天发现又忘记了,所以在写一遍并发个题解记录。

2024-03-30 21:22:52 174

原创 7-统计子矩阵:二维前缀和 + 双指针

双指针 / 滑块思想。

2024-03-29 16:04:46 286

原创 进制转换万能模板

先将值转为十进制(图源网络,侵删)再将十进制转换为其他进制。

2024-03-28 08:50:54 178

原创 7-字串简写:前缀和+滑块思想的学习

两个指针,一个begin,一个end,都 = 0,然后end往后走,自己一直自加,直到满足/不满足条件时(根据check函数设计),进行处理,然后begin+1,之后end再往后走,重复。不过我感觉这题不太适合滑动窗口,有点难理解。

2024-03-27 15:48:09 429

原创 3-冶炼金属:比二分更简单的双指针

从题可以看出,答案一定在1 ~ 最大转换率之间,这个最大转换率是其中一个冶炼金属方式的,可以在输入时直接找出。可以想象出满足条件的一定在1 ~ 最大转换率中,如下图所示,只要找到左右边界输出即可,因此可以考虑。的思路(二分学习中常用思路)出发。

2024-03-25 22:03:43 179

原创 石子合并与果子合并:区间动态规划和贪心

思路:本题为区间合并经典例题,平时思路为,如何将两个两个石子分别合并(递归,从上向下),而在区间合并中,应从结尾出发,将整堆石子分为两堆,再对这两堆继续分,直到分为一个个的石子(递推,从下向上)在区间dp遍历时,先遍历区间长度,再遍历区间左节点。

2024-03-24 16:40:07 511

原创 编辑距离:最短编辑距离问题应用

本题只需要调用最短编辑问题函数即可,注意每个字符串用char数组存储,且从1开始。

2024-03-24 15:41:28 183

原创 最短编辑距离:递推公式详解

修改这一位之前,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为空的情况。

2024-03-23 22:38:06 265

原创 最长公共子序列详解:状态表示的两种方法

本题分析如下图,对于状态可以分两种情况讨论。

2024-03-23 21:04:01 200

原创 最长上升子序列的动态规划:暴力dfs + 记忆化搜索 + dp

增加一个mem数组用于存储。

2024-03-23 17:05:41 730

原创 多重背包的动态规划:暴力dfs + dp + dp优化

本题可以当作完全背包问题的变形,在暴力时候用一个数组进行记忆化存储,在判断第 index 个物品存放的个数时,可以在dfs参数上加一个cnt用于计数,也可以直接用一个for循环。方法三:dp优化,一维数组。方法二:二维数组dp。

2024-03-23 13:20:31 385

原创 完全背包的动态规划:暴力dfs + dp + dp优化

递推数组初始值 = dfs递归边界。递推公式 = dfs向下递归公式。方法二:dp,二维数组。

2024-03-22 16:09:41 410

原创 从跳台阶开始dp优化:三种解法 + 详细解读

其中 f(n)是第n个台阶时的方案数, 因为每次只能走一或两级,因此第n级只可能是从第n - 1级或n - 2级走上来的,也就是第n级台阶方案数为第n - 1级和n - 2级之和,(n),f(n - 2)和 f(n - 1),用三个变量来代替数组f的存储。这是一个动态滚动的过程,三个变量在不断变化之中,此处理解建议多花费时间,可以看出,它只与第n - 1级和n - 2级有关,因此可以设置三个变量。对dfs进行优化,用一个数组 f 来存储第n个台阶时的方案数。要想解决跳台阶问题,最重要的是理解递归条件。

2024-03-18 09:38:15 476

原创 动态规划入门:从暴力dfs到dp

由题可知,一个数字只可以走到他下面的两个数,而在数组中该数下标(x,y),则它可以遍历的数字下标为(x + 1,y)和(x + 1,y + 1),要找到最大的权值,因此递归条件为。递推,也就是从已知答案的小问题逐步推演到源问题的过程,也就是从递归搜索树的下面走到上面回溯的过程,而此过程往往用数组来存储值。,“递”是从上往下,将问题分解为子问题的过程,“归”是从下向上回溯,将已有答案的子问题合并产生答案的过程,而dp就是只调用“归”,从下向上直接找答案。,而这取决于递归搜索树的底部是n还是0。

2024-03-17 18:03:21 851

原创 4-飞机降落

在确认当前飞机能降落后,该飞机降落结束的时间为( 降落时间 + 降落持续时间l),而降落的具体时间应该是t和time的最大值。下一架飞机降落时间在t ~ t + d,之内,因此要使time一定要在t + d之前,也就是t + d > time。每个飞机都有指定的开始降落时间t,最晚降落时间d,和降落所需要时间l,给定一组飞机,看这组飞机能否顺利降落。因为涉及到多个飞机谁先降落的问题,且本题数据大小只有几十,优先考虑暴力,也就是dfs。当所有飞机都降落时停止递归,因此。本题要把所有飞机都降落,所以是。

2024-03-16 22:22:03 408

原创 洛谷 P2036 [COCI2008-2009 #2] PERKET

本题为指数型dfs,且每个数都是有选和不选两个选择,因此无需用到for循环和vis数组,直接进行选和不选两个dfs即可,注意剪枝。给几种调料的酸度和苦度,将其加入食物中,求最小的酸度和苦度差。

2024-03-16 18:25:12 375

原创 洛谷 P1149 [NOIP2008 提高组] 火柴棒等式

给定n个火柴棒,将火柴棒排成数字a、b、c,使得a+b=c,且这n个火柴棒要用完,求可以摆成几种情况。仍然为dfs应用,且为指数型,建立数组用于分别存储abc,重要的是进行多次剪枝,使得运行结果不超时。

2024-03-16 17:56:28 404

原创 洛谷P2089 烤鸡

十个调料可以放1-3g,合起来共为n g,求有几种放的形式。

2024-03-16 14:48:27 334

原创 2-01串的熵

主要注意,比较两个精度高的浮点数时,需要用到abs(a-b) < 0.0001,不能直接用==

2024-03-12 16:16:16 357 1

原创 1.日期统计

首先用一个days[13]数组来存储每个月有几天,然后遍历每个月的每一天,将这一天存储到一个数组中,然后对数组进行遍历,找到和这一天的数组一样的数,找到了则ans++,并进入下一天。

2024-03-12 15:36:34 387 1

原创 PAT A-1144 The Missing Number

这题和柳神思路一样~我也用到了map,不过我的是int,bool型。找到最小的正数,该正数不在给定的数字列里。

2024-03-08 15:37:38 349 1

原创 PAT A-1143 Lowest Common Ancestor

本题中,要寻找BST中的最小共同祖先,要先了解BST的规律,即左子树<根,右子树>根,即输入的u,v的共同祖先一定大于一个数,小于一个数,且满足该条件时,最小的祖先即要求的结果。同时,也存在一个结点为另一结点的祖先的情况,因此也要加上此判定条件。看到这题我习惯性的开始建树,但是建树过程中遇到了些问题,看了柳神的代码,学到了新的思路。看到树、图题时,不要第一反应就是去建立模型,而是通过寻找数之间的规律,找到简便的做法。给定BST(二叉平衡树)的先序遍历,寻找输入的两点的最小共同父节点。

2024-03-08 15:18:49 363 1

原创 PAT A-1142 Maximal Clique

先判断是否为clique,在判断是否为maximal。给定clique的定义,判断给出的点集是否满足要求。

2024-03-08 11:47:08 347 1

原创 PAT A-1141 PAT Ranking of Institutions

给定一些学生的考试成绩,通过给定的成绩计算方式来对院校进行排名。成绩计算时有浮点数,如果直接用int类型存储会导致部分数据有偏差。但是一直后三个测试点一直不通过,看了柳神的博客发现是因为。(这谁想得到啊也太偏了)

2024-03-07 20:55:18 347

原创 PAT A-1140 Look-and-say Sequence

本题为统计数字的数量题,较为简单。

2024-03-04 14:56:44 377 1

原创 PAT A-1138 Postorder Traversal

本题不需要重构树,只需要用到递归进行模拟树。给定先序和中序遍历,求出后序遍历的第一位。

2024-03-02 12:27:09 362 1

原创 PAT A-1137 Final Grading

本题未通过所有测试案例(19/25)给出一些成绩计算规则,输出合格的学生。

2024-03-01 18:51:10 337 1

原创 PAT A-1136 A Delayed Palindrome

给定一个数字a,如该数不是回文数,则将a翻转得到b,判断a+b是否为回文数,如果不是则再次执行翻转并相加,直到结果为回文数,如果十次后得不到回文数则结束。(因为题中给出数字<=1000digits)

2024-03-01 17:55:31 365 1

原创 PAT A-1133 Splitting A Linked List

给定一个链表和数值k,先输出负数,然后输出<=k的数,然后是大于k的。本题采用静态链表存储,注意需要检查链表是否有垃圾结点。

2024-02-25 20:15:13 331

原创 PAT A-1132 Cut Integer

给定一个整数num,将它从中间切开,得两个数a和b,如num可以整除a*b,则输出Yes。,浮点错误是指出现了除以0或取余0的情况,因此需提前检测。

2024-02-25 18:48:35 374

原创 PAT A-1131 Subway Map

本题是多源求最短路径问题,本来想着是用floyd,但是本题为系数图·用矩阵存储特别不方便,因此采用邻接矩阵存储,用直接用dfs列举所有情况进行剪枝,给一个地铁地图,求从一地到另一地如何乘车所经站最少,如有多条路线则找转乘次数少的那条路。本题未通过所有测试案例(22/30),希望有大佬能解答。

2024-02-25 16:26:03 370

原创 PAT A-1087 All Roads Lead to Romea

仍为Djisktra应用,本题我用Djikstra求出所有的最短路径,然后用dfs对所有最短路径进行判断,但是不知道哪里出问题了,一直后面的样例没法通过。求解从起点到Rome,花费最少且幸福值(即点权)最高的路。本题未通过所有测试案例(15/30),希望有大佬能解答。

2024-02-17 18:47:35 366 1

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除