学习笔记:插头DP】的更多相关文章

基于连通性的状压dp 巧妙之处:插头已经可以表示内部所有状态了. 就是讨论麻烦一些. 简介 转移方法:逐格转移,分类讨论 记录状态方法:最小表示法(每次要重新编号,对于一类没用“回路路径”之类的题,可以胜任) 括号表示法(便于操作,但是一些题不能记录状态) 状态存储方法: 不能直接循环所有可能状态,因为状态不满太浪费 哈希+滚动数组 (clear时候,直接memset(hd),cnt=0就是最快的!!!!) 然后具体题目分清楚转移情况讨论即可. 例题 尝试加入各种剪枝以减少状态量. 经典入门例题…
跟着洛谷日报走,算法习题全都有! 嗯,没错,这次我也是看了洛谷日报的第84期才学会这种算法的,也感谢Mathison大佬,素不相识,却写了一长篇文章来帮助我学习这个算法. 算法思路: 感觉dfs版的数位dp还是挺简单的,直接dp然后递推统计答案的那种比它搞脑子多了. 在dfs版本中,我们需要特别注意的地方有两个: 1.是否贴上界: 这是个啥呢? 很简单,给大家举个栗子,假如我们要求解1-12345这段区间,如果我们已经做了3位,而前三位正好是123,那么我们第4位就只能取0-5,否则我们就可以取…
区间 \(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入门. 好了,完成了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,在第二维的一些区间内,取值都是相同的,并且这样的区间是有限个,就可以批量处理. 思想: 通过动态开点线段树维护第二维, 如果某个节点没有儿子,那么这个节点区间都是同一个权值. 也即,一个节点是空节点,那么这个节点所有的值和父亲的值都一致.(其实它的兄弟也是空节点的) 对于序列的问题, 可以直接扫过去,修改某些位置的点. 或者线段树合并. 对于树上的问题, 线段树合…
其实就是贴一下防止自己忘了,毕竟看了题解才做出来 Orz PoPoQQQ 原文链接 Description 背景太长了 给定一个DAG,和一对点(x, y), 在DAG中由x到y连一条有向边,求生成树的方案数. Input&Output Input 第一行四个整数,n,m,x,y. n个节点,m条边,从x到y连一条新边. 接下来m行,每行两个整数,描述有向边. Output 一行一个整数,即答案(mod 1e9 + 7) Solution…
Description Farmer John has purchased a lush new rectangular pasture composed of M by N (1 ≤ M ≤ 12; 1 ≤ N ≤ 12) square parcels. He wants to grow some yummy corn for the cows on a number of squares. Regrettably, some of the squares are infertile and…
我们今天来学习插头DP??? BZOJ 2595:[Wc2008]游览计划 Input 第一行有两个整数,N和 M,描述方块的数目. 接下来 N行, 每行有 M 个非负整数, 如果该整数为 0, 则该方块为一个景点: 否则表示控制该方块至少需要的志愿者数目. 相邻的整数用 (若干个) 空格隔开, 行首行末也可能有多余的空格. Output 由 N + 1行组成.第一行为一个整数,表示你所给出的方案 中安排的志愿者总数目. 接下来 N行,每行M 个字符,描述方案中相应方块的情况: z '_'(下划…
插头DP(我也不知道该怎么定义...)是一种类似于洛谷题目([模板]插头DP)的题目 题目特征为: 在棋盘上 某一维的数据范围很小 完全铺满 计数问题 直接看题吧. [模板]插头DP 给出n*m的方格,有些格子不能铺线,其它格子必须铺,形成一个闭合回路.问有多少种铺法?(2<=n,m<=12) 考虑依次枚举每一个格子,存储轮廓线的状态. 例如图中我们当前正在考虑转移橙色格子,那么轮廓线就是图中的红线. 我们存储轮廓线上的插头.什么是插头呢? 例如下图 本图中的连线在轮廓线上的相交处就是所谓的插…
直接看CDQ在2008年的论文吧. 个人认为她的论文有两个不明确的地方, 这里补充一下: 首先是轮廓的概念. 我们在进行插头DP时, 是从上往下, 从左往右逐个格子进行的, 已经处理的格子与未经处理的格子之间的分界线叫做轮廓线. 因此每个时刻轮廓线的长度都为列数加一. 每次处理下一个格子时, 有且仅有两条轮廓线会变动. 至于什么是插头, 这个很好理解, 就是从格子里面连出来的线就叫做插头. 不难看出, 在本题中, 一个不可选的格子没有插头; 一个可选的格子有且仅有两个插头. 穿过轮廓线的插头叫做…
基于连通性的状压DP问题. 一般是给你一个网格,有一些连通性的限制. 例题 插头DP模板 链接 题意:网格图,去掉一些点,求哈密顿回路方案数. 一般按格递推(从上到下,从左到右). 每个格子要从四个方向中选两个作出边. 我们只需要记录红色的轮廓线的状态,是否有边伸出这个线(称之为插头), 还要记录伸出来的边的连通性. 记录连通性的方法: 最小表示法 括号表示法(适用范围较小,效率一般更高):出边是两两配对的(如果没有回来就有终点了):并且出边不可能交叉(因为如果有交叉就经过重复点了).咱们用三进…
嗯,作为一只蒟蒻,今天再次学习了状压dp(学习借鉴的博客) 但是,依旧懵逼·································· 这篇学习笔记是我个人对于状压dp的理解,如果有什么不对的地方,希望大家指出. 闲话不多说,进入正题. 首先,在介绍状压dp之前,我们先来了解一下状态压缩(常用的为二进制,why?[因为其他的我不会]). 什么是状态压缩呢?顾名思义,就是将数转换为二进制来进行一些操作. 基本操作: 看完基本操作,我们来看一下一些稍微复杂的操作. 操作 运算 取出整数n在二…
数位DP学习笔记 什么是数位DP? 数位DP比较经典的题目是在数字Li和Ri之间求有多少个满足X性质的数,显然对于所有的题目都可以这样得到一些暴力的分数 我们称之为朴素算法: for(int i=l_i;i<=r_i;i++) if(check(i)) ans++; return ans; 所有的算法都是为了减少运算步骤这一个基本原理来优化的,我们考虑这样暴力的优化,显然数的位数上面满足X性质,有些时候X性质并不是单单对于一个数的个体进行限制的 而是在某个限定区域里面的所有数字有一个X的限制,这…
疯狂的暑假学习之  汇编入门学习笔记 (七)--  dp.div.dup 參考: <汇编语言> 王爽 第8章 1. bx.si.di.和 bp 8086CPU仅仅有4个寄存器能够用 "[...]" 中进行单元寻址. bp:除了默认的段地址是ss.其它与bx一样. 它们全部正确的组合 mov ax,[bx] mov ax,[si] mov ax,[di] mov ax,[dp] mov ax,[bx+si] mov ax,[bx+di] mov ax,[bp+si] mov…
DP学习笔记 可是记下来有什么用呢?我又不会 笨蛋你以后就会了 完全背包问题 先理解初始的DP方程: void solve() { for(int i=0;i<;i++) for(int j=0;j<=w;j++) for(int k=0;k*w[i]<=j;k++) dp[i+1][j]=max(dp[i+1][j],dp[i][j-k*w[i]]+k*v[i]); } 其中:k*w[i]<=j是指:如果当前的物品小于背包容量,则选择该物品 dp[i+1][j]=max(dp[i…
[学习笔记]wqs二分/DP凸优化 从一个经典问题谈起: 有一个长度为 \(n\) 的序列 \(a\),要求找出恰好 \(k\) 个不相交的连续子序列,使得这 \(k\) 个序列的和最大 \(1 \leq k \leq n \leq 10^5, -10^9 \leq a_i \leq 10^9\) 先假装都会 \(1 \leq k \leq n \leq 1000\) 的 \(dp\) 做法以及 \(k = 1\) 的子问题 实际上这个问题还可以是个费用流模型: 对于序列中每一个点 \(i\)…
插头dp?你说的是这个吗? 好吧显然不是...... 所谓插头dp,实际上是“基于连通性的状态压缩dp”的简称,最先出现在cdq的论文里面 本篇博客致力于通过几道小小的例题(大部分都比较浅显)来介绍一下这种思路清奇的dp是怎么回事 Part I 定义 何为插头? 插头实际上是一个代称,代指两个格之间的连通性 若dp的某一个状态中,有某相邻的两个格子是联通的(比如说处在同一条路径上.被同一个矩形覆盖blablabla),我们就认为这两个格子之间有插头 举个栗子,格子(1,1)和格子(2,1)联通,…
[学习笔记]动态规划-斜率优化DP(超详细) [前言] 第一次写这么长的文章. 写完后感觉对斜优的理解又加深了一些. 斜优通常与决策单调性同时出现.可以说决策单调性是斜率优化的前提. 斜率优化 \(DP\),顾名思义就是利用斜率相关性质对 \(DP\) 进行优化. 斜率优化通常可以由两种方式来理解,需要灵活地运用数学上的数形结合,线性规划思想. 对于这样形式的 \(dp\) 方程:\(dp[i]=Min/Max(a[i]∗b[j]+c[j]+d[i])\),其中 \(b\) 严格单调递增. 该方…
[学习笔记]动态规划-各种 DP 优化 [大前言] 个人认为贪心,\(dp\) 是最难的,每次遇到题完全不知道该怎么办,看了题解后又瞬间恍然大悟(TAT).这篇文章也是花了我差不多一个月时间才全部完成. [进入正题] 用动态规划解决问题具有空间耗费大.时间效率高的特点,但也会有时间效率不能满足要求的时候,如果算法有可以优化的余地,就可以考虑时间效率的优化. [DP 时间复杂度的分析] \(DP\) 高时间效率的关键在于它减少了"冗余",即不必要的计算或重复计算部分,算法的冗余程度是决定…
说了要肝的怎么能咕咕咕呢? 不了解DP或者想从基础开始学习DP的请移步上一篇博客:DP动态规划学习笔记 这一篇博客我们将分为上中下三篇(这样就不用咕咕咕了...),上篇是较难一些树形DP,中篇则是数位和状压DP,下篇则是各种DP的优化手段. ——正片开始—— (为啥我最近的博客都喜欢写这个) 背包类树形DP,树形DP里一种很鬼畜的题目. 简单点讲就是:树上的分组背包.不知道分组背包的也请前往上一篇学习. 我们先来看一道板子题:选课 然后我们一起分析一下这道题(最好自己先想一想),由于每门课的先修…
插头\(DP\)学习小结 这种辣鸡毒瘤东西也能叫算法... 很优秀的一个算法. 最基本的适用范围主要是数据范围极小的网格图路径计数问题. 如果是像\(Noi2018\)那种的话建议考生在其他两道题难度超过普及组的情况下放弃这题. 其实大佬想做也可以去刚一下 切记如果在考场上看到这种题目,千万不要觉得你看出正解就是切了此题. 请一定将插头\(DP\)题当做一道毒瘤大模拟看待. 要点 这种东西细节挺多的,如果是比较灵活的题目那些转移一定都要好好考虑清楚,尽量做到一次过,否则调试时间可能会爆炸. 目前…
树形DP学习笔记 ps: 本文内容与蓝书一致 树的重心 概念: 一颗树中的一个节点其最大子树的节点树最小 解法:对与每个节点求他儿子的\(size\) ,上方子树的节点个数为\(n-size_u\) ,求对于每个节点子树的最大值,找出最小的那个就好了; (我觉得就不需要code了) 树的直径 概念:一颗带权树的最长路径 解法:维护一个节点到叶子节点的最大距离\(d1[i]\)和次大距离\(d2[i]\) ,最大距离就是$max {d1[i]+d2[i] } $ code #include<ios…
今天学习了树形\(dp\),一开始浏览各大\(blog\),发现都\(TM\)是题,连个入门的\(blog\)都没有,体验极差.所以我立志要写一篇可以让初学树形\(dp\)的童鞋快速入门. 树形\(dp\) 概念类 树形\(dp\)是一种很优美的动态规划,真的很优美真的,前提是在你学会它之后. 实现形式 树形\(dp\)的主要实现形式是\(dfs\),在\(dfs\)中\(dp\),主要的实现形式是\(dp[i][j][0/1]\),\(i\)是以\(i\)为根的子树,\(j\)是表示在以\(i…
点亮技能树行动-- 本篇blog按照分类将网上写的OI知识点归纳了一下,然后会附上蒟蒻我的学习笔记或者是我认为写的不错的专题博客qwqwqwq(好吧,其实已经咕咕咕了...) 基础算法 贪心 枚举 分治 倍增 构造 高精 模拟 图论 图 最短路,次短路 k短路 差分约束 最小生成树 拓扑排序 欧拉图 二分图染色,二分图匹配 最大团,最大独立集 tarjan找scc.桥.割点,缩点 网络流 最大流,最小割,费用流 有上下界的网络流 分数规划 2-SAT 树 LCA 最近公共祖先 树的直径 树的重心…
SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)  …
Java学习笔记(04) 如有不对或不足的地方,请给出建议,谢谢! 一.对象 面向对象的核心:找合适的对象做合适的事情 面向对象的编程思想:尽可能的用计算机语言来描述现实生活中的事物 面向对象:侧重于对象 1.类和对象的关系 :            类是对同一类事物(对象)的抽象,对象是实际存在的该类的各种实体 创建的对象内存分析: 创建的对象存在栈区,开辟的内存空间存在于堆区,在堆区保存值  …
在Redis中直接启动redis-server服务时, 采用的是默认的配置文件.采用redis-server   xxx.conf 这样的方式可以按照指定的配置文件来运行Redis服务.按照本Redis学习笔记中Redis的按照方式按照后,Redis的配置文件是/etc/redis/6379.conf.下面是Redis2.8.9的配置文件各项的中文解释. #daemonize no 默认情况下, redis 不是在后台运行的,如果需要在后台运行,把该项的值更改为 yes daemonize ye…