随笔分类 -  记忆化&动态规划

摘要:Lisa 显然的dp,只需要再二分查找一下 #include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std; int n; struct to{ 阅读全文
posted @ 2021-10-16 17:24 Simex 阅读(38) 评论(0) 推荐(0)
摘要:LIsa 就是一个背包 #include<cstdio> #include<iostream> #include<cstring> #include<iomanip> #include<cmath> #include<algorithm> #define int long long using na 阅读全文
posted @ 2021-10-12 15:56 Simex 阅读(40) 评论(0) 推荐(0)
摘要:Jisoo 不显然的树上dp 定义$f_{i,j}$为第i位和为子树所选奇数个/偶数个点的方案数 然后显然会发现奇数加奇数等于偶数等规律 然后就可以转移了 #include<cstdio> #include<iostream> #include<cstring> #include<iomanip> 阅读全文
posted @ 2021-10-12 13:42 Simex 阅读(42) 评论(0) 推荐(0)
摘要:Jinnie 显然的线性dp 预处理谁是回文串就可以了 #include<iostream> #include<cstdio> #include<vector> #include<queue> #include<cstring> using namespace std; int all[1005][ 阅读全文
posted @ 2021-10-11 23:05 Simex 阅读(24) 评论(0) 推荐(0)
摘要:Jisoo 显然的转移,但是会是$O(n^3)$的,这很不好 但是可以意识到从不是同一颗树转移的时候,无需在意到底是那颗而只在意最大值 并且不会影响从自己转移 那就记录一下最大值 #include<iostream> #include<cstdio> #include<vector> #includ 阅读全文
posted @ 2021-10-11 17:59 Simex 阅读(40) 评论(0) 推荐(0)
摘要:Jisoo 思路比较显然的dp 我们怎么走?状压一波 当然可以,但是也不用 $f_{i}$表示第i天的最小花费,显然我们只要枚举上一个转换点就可以了 毕竟转换了之后,之前怎么走的就不重要了 然后spfa预处理一波 #include<iostream> #include<cstdio> #includ 阅读全文
posted @ 2021-10-11 11:13 Simex 阅读(47) 评论(0) 推荐(0)
摘要:#include #include #include #include #include #include #include #define int long long struct co{ int p; int c; int d; }c[500005]; int n,k,m; struct pp{ 阅读全文
posted @ 2021-10-07 13:56 Simex 阅读(32) 评论(0) 推荐(0)
摘要:Jennie 这也就是个裸的一批的换根dp #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<queue> #include<stack> #include<map> #define 阅读全文
posted @ 2021-10-07 13:43 Simex 阅读(29) 评论(0) 推荐(0)
摘要:Lisa 先想一个朴素的 dp $f_{i,j}$表示前 \(i\) 个把 \(i\) 放在子序列 \(j\) 位的方案数,显然我们的 \(j\) 不是 $a_i$的因数的时候 会直接从上一位继承下来 是不是有 背包那味了 对于每一个 \(a_i\) 我们分解质因子再转移 #include<iost 阅读全文
posted @ 2021-10-07 13:38 Simex 阅读(39) 评论(0) 推荐(0)
摘要:jennie 求形如abababababa的子序列数量? \(f_i=\sum_{j=1}^{i-1}f_j\quad a_i=b且 a_j=a\) \(f_i=\sum_{j=1}^{i-1}f_j+1\quad a_i=a且 a_j=b\) 顺便可以发现,以b结尾不能作为答案 所以说可以优化成没 阅读全文
posted @ 2021-10-05 16:40 Simex 阅读(38) 评论(0) 推荐(0)
摘要:Jisoo 显然满足单调性,可以用单调队列优化 但是要维护两个值 考虑一下这两个值来说,因为每次疲劳值最多加1,那么无论如何优先选择疲劳值最小的来进行转移, 答案肯定不会更差 如果有两个数疲劳值相同但是高度不一样的话,显然保留高度更高的比较好 #include<iostream> #include< 阅读全文
posted @ 2021-09-27 11:49 Simex 阅读(54) 评论(0) 推荐(0)
摘要:Jennie 从左往右处理骨牌,需要知道什么就可以确定状态了? 需要知道当前的差值,然后dp决定取不取反 怎样知道差值 当然是扔到状态里 然后这就是一个背包了 #include<iostream> #include<cstdio> #include<algorithm> #include<cstri 阅读全文
posted @ 2021-09-25 15:56 Simex 阅读(24) 评论(0) 推荐(0)
摘要:Jisoo $dp_i$表示节点i为头的最长毛毛虫 (我这里i的父节点呗算作腿的一条) 然后就可以不用特判地进行转移 #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #define int long 阅读全文
posted @ 2021-09-14 22:55 Simex 阅读(31) 评论(0) 推荐(0)
摘要:Jisoo 这种背包是不是把一维扔进状态就都能做了啊 $dp_{i,j}$表示到了第i个任务的时候A机器工作了j时间,转移显然 有点卡时间,注意常数优化 #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> 阅读全文
posted @ 2021-09-14 22:52 Simex 阅读(38) 评论(0) 推荐(0)
摘要:Jisoo 显然找硬币和付钱是两个过程 然而最多给多少钱呢 有应该找最多多多少呢? 方案一 时间绰绰有余,我们开的大一点 证明 找钱的数量不会超过$V_{max}^2$ #include<iostream> #include<cstdio> #include<algorithm> #include< 阅读全文
posted @ 2021-09-14 22:50 Simex 阅读(55) 评论(0) 推荐(0)
摘要:jennie 怎样处理呢 $O(n^2)$肯定不行 不如,二进制拆分一下 这样$do_i$表示第i位为1的最长长度 对于每一个数,如果他的某一个二进制位为1,那么他可以从之前这一位为1的状态转移过来,然后转移这一位为1的状态 #include<iostream> #include<cstdio> # 阅读全文
posted @ 2021-09-13 21:46 Simex 阅读(18) 评论(0) 推荐(0)
摘要:Lisa 情商和智商和,这不就是个背包 怎样保证大于零呢,我们吧一个商作为维度存进去,另外一个商就是我们转移的值了 然后,直接背包 最后检查所有大于零的部分,统计就可以了 \(dp_i=max(dp_i,dp_{i-s[i]+f_i})\) 注意一下负数要反着转移 然后就可以了 #include<i 阅读全文
posted @ 2021-09-13 21:44 Simex 阅读(41) 评论(0) 推荐(0)
摘要:Jennie 一个比较水的动态规划 \(dp[i][j]=max(dp[i][j],dp[i-1][k])+a_i*j\quad k\in [j-1,j-1+s]\) 然后这个玩意可以用有限队列 #include<iostream> #include<cstdio> #include<algorit 阅读全文
posted @ 2021-09-12 21:34 Simex 阅读(124) 评论(0) 推荐(0)
摘要:Jennie 很简单的东西 分左右端点讨论 #include<iostream> #include<cstring> #include<cstdio> #include<cmath> using namespace std; int n; int l[20005],r[20005]; int dp[ 阅读全文
posted @ 2021-09-12 19:13 Simex 阅读(79) 评论(0) 推荐(0)
摘要:Lisa 这个题其实很水 \[ dp_{ij}=max(dp_{i-1,j-1}+a_{i,j},dp_{i-1,j}) \] 这是什么意思呢,到第i行放j盆花,可能上一个花瓶放的是j-1种花,也可能上一个花瓶(或更久)已经有j-1种花了 #include<iostream> #include<cs 阅读全文
posted @ 2021-09-12 15:03 Simex 阅读(39) 评论(0) 推荐(0)