DP的力量不是无穷的。

  但是,因为它叫做“动态规划”,它在OI界如鱼得水。这个“动态”不是指“离线”与“在线”,也不是什么“可持久化”。它只是把问题抽象为一个个“阶段”,在每一个“阶段”中作出或繁或简的“决策”,并以此实现“状态”与“状态”间的“转移”。

  正如紫书所言,动态规划的理论性和实践性都很强,一方面需要理解“状态”、"状态转移"、“最优子结构”、“重叠子问题”等概念,另一方面又需要根据题目的条件灵活设计算法。

  “根据题目的条件灵活设计算法”,可以说

希望是本无所谓有,无所谓无的。这正如地上的路;其实地上本没有路,走的人多了,也便成了路。

——鲁迅

  也可以说,对动态规划的掌握情况在很大程度上能直接影响一个选手的分析与建模能力。


  分析与建模,是一种十分重要的能力。刘汝佳说,难题无外乎分三种:

  • 难想的
  • 难做的
  • 难调的

  分析与建模,便在很大程度上是关于“思考”。所以伟大的Scanf说,你写出了转移方程,就可以了。

  但真的是“可以”了吗?我的答案是否定的。

  因为其实,想、做、调三者应该是一体的。(在此时Scanf让我们提意见,ZJC说进新机房,臣附议)

  DP优化就是一个典例。因为出题人的缘故(满满的仇恨感),每一次决策的时间必须压缩,或是要简化状态本身。空间就是一个极大的牺牲品。DP本身即建立在“MLE”与“TLE”的夹缝之中,所以每一次优化总是让人伤透脑筋。只要一点没有想清楚,想要“做出来”便很难,“调出来”往往更难。

  所以,DP之伊始即是“分析与建模”。对于这类问题,Scanf总是说:“我们的同学是有思路的~只是实现能力没有起来~”

  其实,任何代码在开始前思路便能很清楚,甚至精确到行,那么实现往往不是大问题。然而“我们的同学”(包括我)更多时候只是“有思路”,且不说“思路”正确与否,即使正确也很难一步到位。

SCOI 2017 酱油记

April 9, 2017

省选终于考完了啊。。
Day1:
先用10分钟浏览了一遍题
看了看t1,感觉贪心好像是对的啊,写了个堆搞一搞
再看t2,最近点似乎可以用点分,再加个树剖维护第一个未签到点,于是码码码,码完3.5h了
一看t3,卧槽计算几何啊。。写了发暴力。然后想到一个n^2sqrt的kd树做法,后来没调出来
最后230
Day2:
又先用10分钟浏览了一遍题
t1切了
t2是两道题加起来的,都可以O(n),然而我都只会nlog,于是T了40
t3写了一个能过大样例的n^2log暴力,但最后只得了10分。。orz
最后170
总分400,似乎挺靠前的

  仔细看看上面这段,MCFX同学的总结,你并不能看出他有任何的“特异功能”,遇到题目很多时候也会卡壳。但是他会深入的思考,会分析,会实践。

  再次反观我,我很多时候太急了,没有掌握好节奏,没有真正想清楚,效率就总是很低。

  当然,也不能一刀切,常常在码题的时候,灵光一闪,没准就创造了一种新算法。


  动态规划是一种用途很广的问题求解方法,它本身并不是一个特定的算法,而是一种思想,一种手段。动态规划的核心是状态和状态转移方程。遇见原问题,就把它分解为相对简单的子问题。

  最优子结构性质,子问题重叠性质,无后效性。

  从递推开始,再到背包,LIS,LCS。

  之后是区间DP。

  终于树形DP来了。(DAG的拓扑性质)

  不厚道的就来了:

    FLOYD,(结合图论)

    数位DP,(数的统计)

    状压DP,(结合二进制)

    概率DP,期望DP,(结合数学)

  既然可以结合数学,那为什么不结合数据结构啊?或者不结合数据结构,直接简化?

  • 倍增优化
  • 单调队列优化
  • 斜率优化
  • 四边形不等式优化
  • ......

  但是,还有,插头、轮廓线……DP是人总结出来的,是永无止境的。

20170520 DP阶段总结的更多相关文章

  1. 2020.7.19 区间dp阶段测试

    打崩了-- 事先说明,今天没有很在状态,所以题解就直接写在代码注释里的,非常抱歉 T1 颜色联通块 此题有争议,建议跳过 题目描述 N 个方块排成一排,第 i 个颜色为 Ci .定义一个颜色联通块 [ ...

  2. 2020.7.19 区间 dp 阶段测试

    打崩了-- 事先说明,今天没有很在状态,所以题解就直接写在代码注释里的,非常抱歉 T1 颜色联通块 此题有争议,建议跳过 题目描述 N 个方块排成一排,第 i 个颜色为 Ci .定义一个颜色联通块 [ ...

  3. AHOI中国象棋(dp)

    大力dp题. 每行每列最多放两个,考虑用行作为dp阶段. dp[i][j][k]表示i行,有一个的有j列,有两个的有k列. 然后就是分类讨论. 一个都不放,放一个在0出,放一个在1出,放两个在0,放两 ...

  4. DP重开

    颓了差不多一周后,决定重开DP 这一周,怎么说,学了学trie树,学了学二叉堆,又学了学树状数组,差不多就这样,然后和cdc一番交流后发现,学这么多有用吗?noip的范围不就是提高篇向外扩展一下,现在 ...

  5. LibreOJ 题解汇总

    目录 #1. A + B Problem #2. Hello, World! #3. Copycat #4. Quine #7. Input Test #100. 矩阵乘法 #101. 最大流 #10 ...

  6. CDQZ 2017 游记

    Day0: 提前放了一整天假,颓过去了.老吕让我去给B层的讲课,ppt还没做,只能在飞机上赶了QAQ.然后从上午到了衡水就一直在路上或者天上,到了晚上才到学校,然而ppt还是没有做完.还有,鄂尔多斯真 ...

  7. openjudge4979 - 海贼王之伟大航路 题解

    原题链接 题目简要分析 N个点,从1号点到N号点求最短路径,且每个点都要遍历到.现在要你求出最优方案. 这道题看到后,首先的想法莫过于搜索.暴力了.这显然不太可能.而进一步思考,使用Floyed和Di ...

  8. 最大子段和之M子段和

    最大M子段和 题目模型 N个整数组成的序列 \(a_1,a_2,a_3,-,a_n\) ,将这N个数划分为互不相交的M个子段,并且这M个子段的和是最大的. 问题分析 方法一: 看到序列,我们首先要尝试 ...

  9. POJ 1946 Cow Cycling(抽象背包, 多阶段DP)

    Description The cow bicycling team consists of N (1 <= N <= 20) cyclists. They wish to determi ...

随机推荐

  1. 精通Python爬虫-03-狩猎大师

    声明: 本系列文章原创于慕课网,作者秋名山车神,任何人不得以任何形式在不经作者允许的情况下,进行任何形式的印刷以及销售,转载需注明出处及此声明. 本系列文章更新至少每周一更,将涉及Python爬虫基础 ...

  2. centos下配置gitosis服务器

    背景: 一台windows电脑,Xshell可以登录centos服务器(centos7.2 64位,有root用户权限),windows电脑已经安装好git和tortoies 在windows下下载和 ...

  3. Daily Scrum (2015/10/21)

    今天可以说是项目正式开始的第一天,由于大家缺乏做团队项目的经验,对TFS的使用都还不太熟悉,所以今天大家的主要工作是熟悉TFS的使用和对代码进行初步的理解.我们预计需要2-3天时间来理解透彻源代码.以 ...

  4. 冲刺One之站立会议6 /2015-5-19

    2015-5-19 今天把服务器端的界面完善了一下,然后大家查了好多资料,实现了登陆界面实际连接的功能,开始加了一个它和服务器的的跳转,但是分析过后发现这是个没有必要的跳转.登录应该直接转到聊天室的主 ...

  5. [并查集] 1118. Birds in Forest (25)

    1118. Birds in Forest (25) Some scientists took pictures of thousands of birds in a forest. Assume t ...

  6. Enterprise Library 5.0 参考源码索引

    http://www.projky.com/entlib/5.0/Microsoft/Practices/EnterpriseLibrary/Caching/BackgroundScheduler.c ...

  7. centos7开机出现try again to boot into default maintenance give root password for maintenance

    开启centos7出现下面两句话,然后直接输出root密码,就可以登录,但是登录后,发现一些文字显示出来的是乱码 try again to boot into default maintenanceg ...

  8. (三)使用Jmeter模拟300个用户登录

    1.首先在系统中创建300个用户(在这里使用 pl/sql 进行循环创建): 代码如下: --先对原先的表进行备份 :CREATE TABLE sys_user_bak AS SELECT * FRO ...

  9. 使用WinSW 将 exe 创建成Windows下面 service的方法 (将nginx创建成 services)

    1. 使用winsw工具能够将部分exe 创建成服务, 这样可以很简单的创建nginx的服务, 避免每次需要执行相应的命令. 2. 方法,下载 工具 地址 github https://github. ...

  10. Android Service执行unbind后再次执行bind的问题

    在执行了startService.bindService.unbindService之后,再次执行bindService.这时发现Service的onBind方法并没有执行,而是执行的onRebind ...