随笔分类 -  ACM / 动态规划 记忆化搜索

摘要:原题链接 考察:记忆化搜索 思路: 不用等完整的DIMA在记录.设置$dp[i][j]\(为当前坐标\)(i,j)$能走的步数.求所有起点的最大$dp[i][j]$. 无穷的条件是当前起点开始走到本次走过的地方.所以还需要一个$bool$数组记录. ##Code #include <iostream 阅读全文
posted @ 2021-08-24 15:31 acmloser 阅读(55) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:记忆化搜索 思路: 注意f数组不能初始化为0,然后通过0判定是否搜过.因为不一定能到终点..... 1 #include <iostream> 2 #include <cstring> 3 using namespace std; 4 typedef long long LL; 5 阅读全文
posted @ 2021-04-13 13:57 acmloser 阅读(92) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:记忆化搜索 思路: 注意这道题只需要覆盖最下面一行的点即可....对于每个第一行的点求出它能覆盖的最后一行的最左边和最右边.然后做区间覆盖即可.如果一个个点求会TLE.我们可以发现如果确定了一个点为起点,它能覆盖的左右端点都是确定的.所以可以用记忆化搜索. 但是这道题如何标记搜过的点 阅读全文
posted @ 2021-04-13 08:51 acmloser 阅读(88) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:记忆化搜索 错误思路: 将f[i][j]定义为达到此点的最大分数,结果是TLE. 正确思路: 和滑雪那道题一样,要将f[i][j]定义为从mp[i][j]出发的最大分数. 应该考虑记忆化搜索的优化原理是搜过一次就不要再搜 1 #include <iostream> 2 #includ 阅读全文
posted @ 2021-02-18 20:21 acmloser 阅读(43) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:记忆化搜索 错误思路1: 数组记录x与y的值,如果重复出现就判死循环. 审题,只有当x的值与操作在此前出现过才是死循环,y的值不影响循环,而单凭x的值也不能判死循环.因为可能进行的操作会不同.所以根据x与下一个操作才能判定一个状态. 错误思路2: for循环i-1遍,用bool数组记 阅读全文
posted @ 2021-02-18 18:39 acmloser 阅读(93) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:记忆化搜索 思路: dfs模拟即可,用map判断当前数字出现过几次.但是回溯的时候要注意,如果本该有的数字没有说明被凑成了一对,但是恢复要恢复成1,如果有就要去掉这个数字. 本蒟蒻真的写得很繁琐,这位大佬利用位运算0 1的性质避免了判断2,很妙 GO 网上题解基本都用了步数作为参数, 阅读全文
posted @ 2021-02-18 02:17 acmloser 阅读(23) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:记忆化搜索 太菜了太菜了,说实话本蒟蒻完全没看出来为什么要用记忆化搜索.T了两次算了搞明白了点. 假定数据: a = aaa,b = aaa, c = aaaaaw. 很容易看出答案是错的,但是dfs会不断搜索,在返回的时候,用了b一个字符会在优先使用a一个字符.而此状态被搜索过,因 阅读全文
posted @ 2021-02-17 23:48 acmloser 阅读(56) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:记忆化搜索 15min内WA 6次,不愧是我 思路: 按题目意思走即可. 坑点: 记忆化数组的n必须开很大,否则WA.因为在m>0&&n>0内,m每减一次1,n就要累加一次和. 可能要开long long, 1 #include <iostream> 2 #include <cstr 阅读全文
posted @ 2021-02-17 20:31 acmloser 阅读(81) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:记忆化搜索 思路: 可用递推和记忆化搜索两种方式. 1 #include <iostream> 2 #include <cstring> 3 #include <algorithm> 4 #include <cstdio> 5 using namespace std; 6 const 阅读全文
posted @ 2021-02-17 19:46 acmloser 阅读(59) 评论(0) 推荐(0) 编辑