2018.8.17 2018暑假集训 关于dp的一些感想(以目前的知识水平)
学了这么长时间的dp似乎还是不怎么样
谨以此篇文字记录一年以来与dp斗智斗勇的各种经历
关于dp(也就是动态规划)似乎对于每个OIer来说都是一个永远的噩梦。

刚刚开始学dp的时候完全搞不明白(只是觉得好厉害的样子) 完全停留在刚刚好能够看懂转移方程的阶段
事实上dp这个东西和其他任何算法都不太一样,同样是仅仅看不可能学会,但是更加可恶的一点是,你仅仅是看,不仅学不会,而且基本上什么东西都学不来。
说到底,毕竟哪个题都不一样,基本上不可能考到同样的题同样的转移方程(可惜当时并不明白这个道理)。
于是甚至在之后的几个月,对于每个和dp有关系的题,基本上都是看题解——想一想——就交了。。。。。。
导致在这半年中,不管其他算法,我的dp可以说没有半点大的进展。
直到我终于下定决心在洛谷上刷了三四十道dp之后。

所谓刷了三四十道dp,不过是在看了题解之前多想了两三个小时而已(大家千万不要学我Q_Q)
尽管如此,仍然是量变导致质变,总算明白了一点dp究竟是啥
所谓dp这个东西,其实就是状态的表示、初始化以及从一个状态向另一个状态的转移(废话)
关于书上写的那个无后效性 其实就是判断能不能用dp做‘
有很多人曾经问过我和我们一些同学dp究竟是啥,说的通俗一点,其实就是一个每个点只搜了一次的搜索,只不过搜索的顺序比较玄学,所以扯到了各种各样的状态之类的东西。
对于本人现在的水平 重点就是状态的划分
比如说01背包 就是对于每个物品的装和不装的枚举,再比如说摆花,就是对于每盆花摆在哪里的枚举。(其实很多题都可以经过多次推导变化成这两个题,以后会再提)
很多时候会想,dp的数组究竟应该怎么开,开几维才能不TLE以及MLE
后来总算想起来一个方法,就是枚举变量
对于我们这种水平的蒟蒻来讲,一般求什么dp的结果就是什么 这是一个变量
为了方便起见,我们把题目中可视的或者较为明显的称为一阶变量,需要经过一阶变量推出的称为二阶变量,同样的可以推出n阶变量,其中包括结果在内的任何一个变量都可以是一到n阶变量(只要你用得比较熟练这个方法应该可以一直用下去)
假设我们已经根据题面初步计算出了在不会TLE及MLE的情况下最多几维dp
这样我们在选取变量作为参数的过程中就可以根据位置的个数选取不同阶数的变量进行状态的表示了
关于对状态的初始化
其实重点就是在可以手算或者心算的边界条件中选取必要的作为初始化的结果
当然还有 例如对每个状态初始值的设定用来判断状态是否有效或者对累加的设置等
关于对状态的转移
刚才已经提到过了状态的划分,其实状态的转移就是从前一个状态转移到后一个状态
通常情况下,对于转移方程来讲,主体一定是对当前状态的操作
例如01背包的二维转移方程 dp[i][v]=max(dp[i-1][v],dp[i-1][j-w[i]]+c[i])其实就是对第i件物品“取与不取”的操作
最后再注意一下循环的顺序以及方向等细节就可以了
上述这些文字,作为一年中与dp斗智斗勇的一部分经历,也算是OI生涯中的一部分吧。
2018.8.17 2018暑假集训 关于dp的一些感想(以目前的知识水平)的更多相关文章
- [暑假集训--数位dp]LightOj1205 Palindromic Numbers
		
A palindromic number or numeral palindrome is a 'symmetrical' number like 16461 that remains the sam ...
 - [暑假集训--数位dp]hdu3709 Balanced Number
		
A balanced number is a non-negative integer that can be balanced if a pivot is placed at some digit. ...
 - [暑假集训--数位dp]hdu3555 Bomb
		
The counter-terrorists found a time bomb in the dust. But this time the terrorists improve on the ti ...
 - [暑假集训--数位dp]hdu3652 B-number
		
A wqb-number, or B-number for short, is a non-negative integer whose decimal form contains the sub- ...
 - [暑假集训--数位dp]hdu2089 不要62
		
杭州人称那些傻乎乎粘嗒嗒的人为62(音:laoer).杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来,就可以消除个别的士司机和乘客的心理障碍, ...
 - 暑假集训 || 概率DP
		
Codeforces 148D 考虑状态转移..https://www.cnblogs.com/kuangbin/archive/2012/10/04/2711184.html题意:原来袋子里有w只白 ...
 - 暑假集训 || 树DP
		
树上DP通常用到dfs https://www.cnblogs.com/mhpp/p/6628548.html POJ 2342 相邻两点不能同时被选 经典题 f[0][u]表示不选u的情况数,此时v ...
 - 暑假集训 || 区间DP
		
区间DP 经典石子合并问题V1 复杂度 On3 int a[SZ], sum[SZ], f[SZ][SZ]; int main() { int n; scanf("%d", ...
 - [暑假集训--数位dp]hdu5787 K-wolf Number
		
Alice thinks an integer x is a K-wolf number, if every K adjacent digits in decimal representation o ...
 
随机推荐
- 微信红包功能(含示例demo)
			
开通支付权限 登录微信公众平台管理后台,找到“微信支付”一栏,进行开通会跳转到“微信支付商户平台”,根据提示提交相关证明,完成支付权限的开通开通之后,“微信支付”一栏会显示相关信息,在“开发-接口权限 ...
 - 最简单的IdentityServer实现——IdentityServer
			
1.新建项目 新建ASP .Net Core项目IdentityServer.EasyDemo.IdentityServer,选择.net core 2.0 1 2 引用IdentitySer ...
 - PHP模拟单链表的数据结构
			
<?php /*** * 单链表 */ //节点,下标,节点名称,下一个节点的地址 class Node { public $id; public $name; public $next; pu ...
 - canvas——粒子系统(1)
			
这个动画在很早之前就见过,当时就没迷住了.最近在学canavs动画,动手实现了一下.代码在这里.展示效果在这里. 这属于粒子系统的一种,粒子系统就是需要管理一堆粒子嘛,动画实现的关键在于,遍历这些粒子 ...
 - Win8 Metro(C#)数字图像处理--2.47人脸红眼去除算法
			
原文:Win8 Metro(C#)数字图像处理--2.47人脸红眼去除算法  [函数名称] 红眼去除 RedeyeRemoveProcess(WriteableBitmap src) ...
 - SQL Server修改标识列方法(备忘)
			
原文:SQL Server修改标识列方法(备忘) SQL Server修改标识列方法 ----允许对系统表进行更新 exec sp_configure 'allow updates',1 reconf ...
 - PHP的MIPS交叉编译(CC=mipsel-openwrt-linux-uclibc-gcc,LD=mipsel-openwrt-linux-uclibc-ld)
			
物联网内存吃紧,跑JVM这种内存大户肯定吃不消.要跑还是跑C实现的服务,比如Nginx+PHP+SQLite.比如一些家用无线路由器,系统是Linux发行版OpenWrt,内存只有64MB到128MB ...
 - WPF TextBlock 文字超长截断并显示省略符号
			
<TextBlock x:Name=" FontSize="9pt" Margin="0 2 0 0 " VerticalAlignment=& ...
 - 微信小程序把玩(四十一)canvas API
			
原文:微信小程序把玩(四十一)canvas API 绘图是每个移动应用必备的技术,基本上和Android,IOS,等移动开发都是相同的,创建个上下文,给你个画布再上画,官网给的小例子都比较全了自己去看 ...
 - Linux kernel version dirty
			
在我们使用git来管理Linux Kernel的时候,在编译的时候会在你的kernel version加上git commit number 有时候还会出现dirty字样,字面意思是内核被污染的意思. ...