学习总结5
来源:互联网 发布:php网页设计培训 编辑:程序博客网 时间:2024/06/09 20:20
2017-12-08 DP学习
本次学习内容主要有树形DP,状压DP,概率DP和数位DP。
树形DP例题
codeforces 219 D Choosing Capital for Treeland
给出N个点,其中有N-1条有向边,边的方向可以改变,问最少改变多少条边可以从某一个点到达任意一个点,同时求出这些点。直接求是
poj 3107 Godfather
给一颗n个结点的树,节点编号为1~n,问删除一个节点之后,让剩下的分支中节点数量最多的尽量少。求树的重心模板题。
HDU 4980 A simple graph problem.
有一颗n个节点的树,每条边有边权。现在你要在这些节点让放一些队员,让队员访问完全部的边。放置一个队员的代价是K,一个队员经过一条边需要付出边权的代价。并且一个队员不能经过同一条边两次。问最小代价是多少。记dp[i][j]表示i这个节点的子树的边全部访问完全,并且有j个队员的终点在i点(即还可以再往上走)。注意发现每个节点往上的路径不会超过2条(不然就可以省掉一个队员),所以j的范围是[0,2]。转移不难推出。
数位DP例题
poj 3252 Round Numbers
算出区间内二进制中0的个数大于等于1的个数的数字有多少个。就是一个二进制的数位DP。用数位DP的套路,f[l][one][zero][flag] 表示还剩l位数,前面有one个1,zero个0,并且是否顶上界。转移时直接枚举当前位取0还是1。
HDU 4734 F(x)
定义
Codeforces 55D Beautiful numbers
求一个区间内的Beautiful numbers有多少个。Beautiful numbers指:一个数能整除所有组成它的非0数字。例如15可以被1和5整除,所以15是Beautiful numbers。比较朴素的想法是令f[len][num][lcm][flag] 表示长度为len位,当前位的数对2520取余后的值为num,截止当前位的所有数码的最小公倍数为lcm的数的个数。flag表示当前数是否顶住上界。但这样做数组是开不下的。注意到1到9的最小公倍数为2520,它仅有48个因数,所以lcm这一维可以离散化,这样就解决了这个问题。
计蒜客 阿里云秘钥池
求1到n之间,在p进制下,每位两两互素的数的个数。n<=1e18,p<=1e5。记f[i][j]表示p进制下长度为i,最高位为j的数的个数,那么易知
状压DP例题
CodeForces 453B Little Pony and Harmony Chest
给出一个序列a,求取一个序列b,b序列的数两两互质,问能够导致∑|ai−bi|最小的方案。其中ai<=30,序列长度小于100。时限4秒。定义f[i][j]表示前i个数达到j状态的最小的结果,j状态表示已经被用过的质数。因为ai不超过30,所以如果选一个超过60的数一定不会比1优,所以可能存在于最优解中的数的质因子一定不会超过60。而60以内的质数共有17个,状压即可。
CDOJ 1296 A Graph Problem
有n个城市和m条双向路,有k个人,每个人选了两个不同的城市。现在让你尽可能多的删除边,是的这k个人每个人都可以从选的两个之间移动。此题思维难度较大。令dp[i]表示,这些点连在一起的时候,最少需要多少边。dp1[i]表示,这些点连在一起的时候,可以有其他的点也并入,最少需要多少边。通过k个城市对,可以分成一些联通的集合。dp2[i]表示,这些集合对应的点连在一起的时候,最少需要多少边。dp3[i]表示,这些集合可以相互不连通的时候,最少需要多少边。使用压位的方法枚举子集,依次递推。
poj 1753 Flip Game
给一个
CDOJ214 Lights
有N(N<35)盏灯,每盏灯有开和关两种状态,每个灯有一个开关,用来改变对应灯的状态。灯之间有M(M<=595)个链接,若两灯相连,它们的状态会同时改变。问至少按多少个开关,才能使所有灯亮(保证至少存在一种方案使所有灯亮)。
概率DP例题
HDU 4405 Aeroplane chess
在一条有n个格点的线上掷骰子,有1-6六个值,如果当前位置不小于n,则胜利,有m个跳跃点,到x位置可以直接飞到y位置(x < y),问从起点开始到终点掷骰子的期望数。概率DP入门题目,状态定义与转移不难想到,只需特殊处理跳跃点即可。
Codeforces 148D Bag of mice
原来袋子里有w只白鼠和b只黑鼠 ,龙和王妃轮流从袋子里抓老鼠。谁先抓到白色老鼠谁就赢。王妃每次抓一只老鼠,龙每次抓完一只老鼠之后会有一只老鼠跑出来。每次抓老鼠和跑出来的老鼠都是随机的。如果两个人都没有抓到白色老鼠则龙赢。王妃先抓,问王妃赢的概率。 分四种情况转移:王妃抓到白鼠,王妃赢;王妃抓到黑鼠,龙抓到白鼠,龙赢;王妃和龙都抓到黑鼠,逃掉一只白鼠;王妃和龙都抓到黑鼠,逃掉一只黑鼠。
SGU 385 Highlander
随机给出 1,2,。。。,n 个数字的一个排列 i1,i2,…in,对应了一张有向图 G = (V, E),其中 V={1, 2, …, n},E={(1, i1), (2, i2), …, (n, in)}。问在最长环上的顶点数的期望值。 2 ≤ n ≤ 100。
一道好题。记
答案为
bzoj3317 First Knight
一个m×n的棋盘,左上至右下编号为(1, 1)至(m, n),并给定每个格子到周围四个格子的概率。一个骑士从(1, 1)开始,按照给定概率走,问到达(m, n)的期望步数。题目保证从任一格开始到(m, n)的概率均为1 。1≤m,n≤40,多组数据。此题的递推存在环,如果列出方程直接求解期望,时间上无法承受。但是通过观察发现每次消元最多消去2n个,所以复杂度降为O(n^3*m),可以通过。
总结
DP题目比较灵活,但其重中之重还是在于正确地推导状态定义与转移方程,剩下的都是套路了。DP也是一类需要多练习的题目,一定要多写多练。
- Linux学习总结5
- 学习总结5
- 学习总结5
- 2016.8.5 学习总结
- JAVA学习总结5
- Dataquest学习总结[5]
- 学习总结5
- 学习总结5
- H264学习笔记(5):学习总结
- 2010/1/5学习总结
- 显著检测学习总结5
- 慕课第5周学习总结
- 慕课第5次学习总结
- [2015.8.5]C++学习总结
- 5月份英语学习总结
- opnet14.5学习总结一
- opnet14.5学习总结二
- opnet14.5学习总结三
- Apache优化(一)
- 实现像UGUI中Button一样可以拖拽绑定事件
- PHP获取文件扩展名
- 分布式第二章 单机存储系统
- TP框架复合查询条件
- 学习总结5
- 函数形参默认值
- 设计模式的艺术之道--职责链模式
- LinkedList源码分析详解
- java单链表操作
- 下拉框+文本框+搜索按钮
- sql关于联表查询不存在
- 2-jvm概述
- linux文件系统简介