第二章 第四节 动态规划

http://www.jiong3.cn/blog/article.asp?id=260

 

又是一个坑,不过肯定会填,放心=.=要不然这个Blog就越来越没价值了……

//填坑中

---------------------

(1)线性规划

在接触“动态规划”这个似乎很高深的名词前,我们先来思考一个题目:给你若干件物品,每个物品只有一件,每个物品都有它的重量和价值,现在你有一个限制了重量的背包,如何选择物品放入使价值最大?

这道题目初看下去非常容易:选择价值最大的放直到放不下不就可以了吗?可是我们再想想就发现问题了:假如现在背包是200重量限制,有一个200重量50价值的物品,一个100重量40价值的物品,一个100重量30价值的物品,那么按照我们上面的策略我们显然不能得到最优解70。即使我们更换策略,比如说使用价值与重量的比选择,我们也不能取得最优解。(事实上,初一的时候我做采药就是选择价值与重量的比……)那么,我们有什么方法呢?

不妨我们来换一个角度考虑:假如我们想办法对于每种重量所对应的物品放置方案的价值取最大值,是不是就能得到一个较优甚至是最优解呢?其实这就是动态规划思想的一个体现。

动态规划到底是什么?我认为,动态规划就是“贪心的贪心”,是一种有手段、有目的、有策略、有规律的贪心,无论多么高深的动态规划,本质跟贪心没有什么区别(当然,这是从一定的角度来说的),所以也正是此章被叫做“贪心的贪心”的原因。

动态规划的核心思想其实就是将问题划分成若干个“子问题”(阶段),然后在子问题中取得一个最优解后转移到下一个阶段。这听起来有点像分治,实际上也差不多,不过动态规划是一个子问题接着一个子问题转移,分治是多个子问题计算完后同时集中。

因此,如果一个问题符合动态规划的定义,那就应该具有两个特点:能划分阶段,无后效性。这两个定义会迷惑不少刚接触动态规划的人(事实上我当时也不明白“无后效性”是啥意思),实际上就是跟我上面说的一样,问题能划分开,然后每个阶段做的决策不会影响后面的决策。对于后一点,我来举个例子吧:现在在我的电脑上有一部电影,我先决定是不是下载它,然后再决定看不看他。但是,我的前一个决定显然会影响我的后一个决定(不下载怎么看?),这就是后效性。

满足这两个条件我们还需要了解一下“状态转移方程”的定义。状态转移顾名思义,其实就是把每个阶段的状态转移到下一个阶段的方程(太恶心了……)。

动态规划实际上是个可以研究非常久的东西,下面我们将会看到几种不同的动态规划方法。当然,考虑到Noip将近,我会暂时不写状态压缩DP(State-Compression),这个东西我自己也晕晕乎乎的(这啥?!),如果有需要的话我推荐两篇论文

1、鱼牛的论文,这个尽管没完成也有极高研究价值的论文,可惜鱼牛的意思好像是不写了……

2、WC 2008 CDQ神牛的论文,注意一定要搞到DOC原版,PPT完全信息量都不在一个层次上……

//待写


 

posted @ 2008-12-22 11:17  jesonpeng  阅读(176)  评论(0编辑  收藏  举报