【学习笔记】数位DP】的更多相关文章

跟着洛谷日报走,算法习题全都有! 嗯,没错,这次我也是看了洛谷日报的第84期才学会这种算法的,也感谢Mathison大佬,素不相识,却写了一长篇文章来帮助我学习这个算法. 算法思路: 感觉dfs版的数位dp还是挺简单的,直接dp然后递推统计答案的那种比它搞脑子多了. 在dfs版本中,我们需要特别注意的地方有两个: 1.是否贴上界: 这是个啥呢? 很简单,给大家举个栗子,假如我们要求解1-12345这段区间,如果我们已经做了3位,而前三位正好是123,那么我们第4位就只能取0-5,否则我们就可以取…
算法笔记 这个博客写的不错:http://blog.csdn.net/wust_zzwh/article/details/52100392 数位dp的精髓是不同情况下sta变量的设置. 模板: ]; ll dp[][state];//不同题目状态不同 ll dfs(int pos,/*state变量*/,bool lead/*前导零*/,bool limit/*数位上界变量*/)//不是每个题都要判断前导零 { //递归边界,既然是按位枚举,最低位是0,那么pos==-1说明这个数我枚举完了 )…
区间 \(dp\) 1.[HAOI2008]玩具取名 \(f[l][r][W/I/N/G]\) 表示区间 \([l,r]\) 中能否压缩成 \(W/I/N/G\) \(Code\ Below:\) #include <bits/stdc++.h> using namespace std; const int maxn=200+10; int n,W,I,N,G,le[maxn],fir[maxn],sec[maxn],f[maxn][maxn][4],cnt; char s[maxn]; in…
最近几天学了一下树形\(dp\) 其实早就学过了 来提高一下打开树形\(dp\)的姿势. 1.没有上司的晚会 我的人生第一道树形\(dp\),其实就是两种情况: \(dp[i][1]\)表示第i个人来时的最大人数 \(dp[i][0]\)表示第i个人不来时的最大人数 然后递归至叶子节点,倒推\(dp\) 状态转移方程: \[dp[root][1]+=dp[G[root][i]][0];\] \[dp[root][0]+=max(dp[G[root][i]][1],dp[G[root][i]][0…
基于连通性的状压dp 巧妙之处:插头已经可以表示内部所有状态了. 就是讨论麻烦一些. 简介 转移方法:逐格转移,分类讨论 记录状态方法:最小表示法(每次要重新编号,对于一类没用“回路路径”之类的题,可以胜任) 括号表示法(便于操作,但是一些题不能记录状态) 状态存储方法: 不能直接循环所有可能状态,因为状态不满太浪费 哈希+滚动数组 (clear时候,直接memset(hd),cnt=0就是最快的!!!!) 然后具体题目分清楚转移情况讨论即可. 例题 尝试加入各种剪枝以减少状态量. 经典入门例题…
知识储备:dp入门. 好了,完成了dp入门,我们可以做一些稍微不是那么裸的题了. dp基础,主要是做题,只有练习才能彻底掌握. 洛谷P1417 烹调方案 分析:由于时间的先后会对结果有影响,所以c[i]*b[j]>c[j]*b[i]为条件排序,然后再01背包. 洛谷P1387 最大正方形 分析:用dp[i][j]来表示以a[i][j](正方形数组)为右下角最后一个数的正方形边长,a数组可以直接用dp数组代替掉. #include <cstdio> #include <algorit…
知识点 动态规划(简称dp),可以说是各种程序设计中遇到的第一个坎吧,这篇博文是我对dp的一点点理解,希望可以帮助更多人dp入门.   先看看这段话 动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法.20世纪50年代初美国数学家R.E.Bellman等人在研究多阶段决策过程(multistep decision process)的优化问题时,提出了著名的最优化原理(principle of optimalit…
其实就过了模板. 感觉就是带修改的dp [模板]动态dp 给定一棵n个点的树,点带点权. 有m次操作,每次操作给定x,y表示修改点x的权值为y. 你需要在每次操作之后求出这棵树的最大权独立集的权值大小. n,m<=1e5 参考题解:shadowice1984 n^2 DP简单又自然. 但是对于1e5次修改就不行了. 每一次修改会影响整个到根的链上的值. 采用树剖. ldp[i][0/1]表示i选不选,对于所有的轻儿子dp值. dp[i][0/1]表示i选不选,对于总共的所有儿子的dp值. ldp…
问题: 有一些问题,通常见于二维的DP,另一维记录当前x的信息,但是这一维过大无法开下,O(nm)也无法通过. 但是如果发现,对于x,在第二维的一些区间内,取值都是相同的,并且这样的区间是有限个,就可以批量处理. 思想: 通过动态开点线段树维护第二维, 如果某个节点没有儿子,那么这个节点区间都是同一个权值. 也即,一个节点是空节点,那么这个节点所有的值和父亲的值都一致.(其实它的兄弟也是空节点的) 对于序列的问题, 可以直接扫过去,修改某些位置的点. 或者线段树合并. 对于树上的问题, 线段树合…
树形 dp 介绍 概念 树形 dp,顾名思义,就是在树上做 dp,将 dp 的思想建立在树状结构之上. 常见的树形 dp 有两种转移方向: 从叶节点向根节点转移,这种也是树形 dp 中较为常见的一种.通常是在 dfs 回溯后时更新当前节点的答案. 从根节点向叶节点转移,通常是在从叶往根dfs一遍之后,再重新往下获取最后的答案. 特点 是在树上做的. 主要是在对一棵树做 dfs 时进行转移. 转移方程非常直观,但是细节较多. 套路 这个分类偏主观. 选择节点类: 无限制类:一般是点权(边权)和最大…