摘要: 背包问题总结 当空间优化为一维后的限制 除了完全背包 和多重背包的单调队列优化写法 其他的背包问题 体积都是从大到小循环的 体积至多为v 一般的背包问题 体积恰好为v 除了dp[0]外 其他初始化为无穷即可 体积至少为v 除了dp[0]外 其他初始化为无穷 更新的时候 j-w[i] 可以是负数也可以 阅读全文
posted @ 2021-01-24 09:00 canwinfor 阅读(114) 评论(0) 推荐(0) 编辑
摘要: 此处总结的是 矩阵类地图和LIS LCS问题 何时能用: dp一定是最优解 因为dp是得到了所有的情况 只不过取了最优的答案,所以三种属性一定满足,即 数量/max/min 也可以用来判断是否存在的合法性 见题目3 即dp[i][j]=1 即代表这个状态的合法 注意dp得到了模型之后,下次再见到类似 阅读全文
posted @ 2020-11-16 16:06 canwinfor 阅读(26) 评论(0) 推荐(0) 编辑
摘要: len=i-next[i] 等价于 以i为终点的最小循环节长度 假设 总长为n 如果len能整除n 说明周期为n/len 否则 差几个就补几个就能达到一个周期 即 ans= (len-n%len)%len 题目链接:https://vjudge.net/contest/394060#problem/ 阅读全文
posted @ 2020-10-12 16:31 canwinfor 阅读(124) 评论(0) 推荐(0) 编辑
摘要: 题意:迷宫问题 从起点出发 每次可以同方向走1~k步 问最少多少次能到达终点 题目链接:https://atcoder.jp/contests/abc170/tasks/abc170_f 开始我是直接考虑的普通的bfs 然后这样的做法可能会有某些路被堵住 能套vector开二维 尽量别用map 而让 阅读全文
posted @ 2020-06-16 15:41 canwinfor 阅读(344) 评论(0) 推荐(1) 编辑
摘要: 组合计数总结 递推求组合数 类似dp 题目链接:https://www.acwing.com/problem/content/1309/ 假设公牛为1 母牛为0 dp[i] 为以1结尾长度为i 的方案 所以划分子集的话就是 dp[i]=dp[1]+dp[2]+……dp[i-k-1] 但是这样状态计算 阅读全文
posted @ 2021-05-01 19:49 canwinfor 阅读(30) 评论(0) 推荐(0) 编辑
摘要: 题目链接:https://codeforces.ml/problemset/problem/1519/D 思路: 可以预处理前后缀和 然后枚举翻转的终点 然后左右同时扫一遍得到答案 为了让长度为偶数的情况好处理 可以像manacher那样 把长度边为2*n 中间用0隔开 1 #include<bit 阅读全文
posted @ 2021-04-30 09:33 canwinfor 阅读(109) 评论(0) 推荐(0) 编辑
摘要: 题目链接:https://www.acwing.com/problem/content/263/ 思路:跟 线段树维护区间最大连续区间的类似思路 ld为前缀最长连续1 rd为后缀最长连续1 d为当前区间内最长连续的1 注意的点就是 1.多了一个区间修改 注意传lazy 2.只有当左区间满了1 才能将 阅读全文
posted @ 2021-04-25 16:08 canwinfor 阅读(46) 评论(0) 推荐(0) 编辑
摘要: 题目链接:https://ac.nowcoder.com/acm/contest/955/D 思路: 要求的是最大循环节 那么就是用i-最小的公共前后缀来得到 暴力的话就是 每次i的时候nxt[i] 都往回跳直到不能跳为止,但这样最坏可能会到n^2 考虑如何优化 每次前面跳的时候直接让 nxt[i] 阅读全文
posted @ 2021-04-22 09:53 canwinfor 阅读(102) 评论(0) 推荐(0) 编辑
摘要: 题目链接:https://www.acwing.com/problem/content/description/161/ 思路: 枚举列的长度求出行的循环节 找到最小的行的循环节 即矩阵的宽 然后再通过宽缩短每一行的字符串 对每一行的字符串做kmp求出列的最小循环节 即确定下来高 然后高×宽即可 注 阅读全文
posted @ 2021-04-21 23:50 canwinfor 阅读(78) 评论(0) 推荐(0) 编辑
摘要: 题目链接:https://www.acwing.com/problem/content/1243/ 思路:考虑暴力的写法 每次枚举每一秒 然后来进行模拟,这样写是n^2的 可以发现很多时间段没有订单 这些都是-1的操作,所以考虑只枚举有订单的点,每次和上一次出现的订单点 相减, 这样就只需要枚举时间 阅读全文
posted @ 2021-04-10 13:56 canwinfor 阅读(53) 评论(0) 推荐(0) 编辑
摘要: 题目链接:https://www.acwing.com/problem/content/description/1212/ 思路:考虑最暴力的写法 n^2 枚举区间 即起点和终点 然后将区间的数sort一遍 再判断一遍是否每个数都满足递增加1的关系 考虑如何去优化, 区间内的数排序后都要成递增的关系 阅读全文
posted @ 2021-04-08 15:20 canwinfor 阅读(64) 评论(0) 推荐(0) 编辑
摘要: 题目链接:https://www.acwing.com/problem/content/2875/ 思路:对于每个字母 只有他在子串中第一个出现的时候才有贡献 所以考虑从1~n枚举 对于每个s[i] 计算出所有包含他的子串,且他是第一个出现的种类字母的子串数量即可 lst[i] 记录的是 i类字母上 阅读全文
posted @ 2021-04-08 10:15 canwinfor 阅读(497) 评论(0) 推荐(0) 编辑
摘要: 题目链接:https://www.acwing.com/problem/content/275/ 思路:首先要知道一个性质 : 一定存在一组最优解b[i] 使得每个b[i]都在a[i] 中出现过 证明略 然后考虑dp[i][j] 代表前i个a[i] 一定匹配好 且b中最后一个数是b[j] 的最小值 阅读全文
posted @ 2021-04-06 21:50 canwinfor 阅读(238) 评论(0) 推荐(0) 编辑
摘要: 双指针有两类 一类是指向两段序列 一类是指向一段序列 题目一 题目链接:https://codeforces.com/edu/course/2/lesson/9/1/practice/contest/307092/problem/B 题意:给定 a b 数组 递增排序 问对b中每一个数 有多少个a[ 阅读全文
posted @ 2021-04-04 23:47 canwinfor 阅读(60) 评论(0) 推荐(0) 编辑