那些正常的动态规划

打印 上一主题 下一主题

主题 967|帖子 967|积分 2901

目录

媒介

在说线性dp之前,我们先来聊一聊动态规划是啥?
动态规划到底是啥?

动态规划是普及组内容中最难的一个部分,也是每年几乎必考的内容。它对思维的要求极高,它和图论、数据结构不同的地方在于它没有一个标准的数学表达式和明白清晰的解题方法。
动态规划是对求解最优解的一种途径,而不是一种特殊的算法。由于各种问题的性质不同,确定最优解的条件也互不相同,因而动态规划的设计方法对不同的问题,有各具特色的阶梯方法,而不存在一种万能的动态规划算法。为了方便学习,我们把若干具有代表性的动态规划问题归纳总结成不同的几类,并建立对应的数学模型。
动态规划一般用来求解多阶段决策问题的最优解,可以将过程分成若干个相互联系的阶段,在它的每一阶段都需要做决策,从而使整个过程到达最好的活动结果。各个阶段决策的选取不是任意确定的,它依赖于当前面临的状态,又影响以后的发展,当各个阶段决策确定后,就组成一个决策序列,因而也就确定了整个过程的一条活动路线。

对于动态规划问题,最紧张的是分析出:
一、决策对象:我们需要对题目中的哪个变量举行决策。
二、阶段:需要将问题的全过程恰当的分成若干个相互联系的阶段,以便按肯定的序次去求解。阶段的分别一般是根据时间(先后顺序)空间(大小关系) 的天然特征来分别。
三、状态:某一阶段的出发位置称为状态,一个阶段可能包含多个状态,状态大多都是用 数组 来表示,即表示我们需要的答案。
四、决策:分析完问题后我们应该怎么解决问题。
五、状态转移方程:形貌前一阶段到后一阶段的状态演变规律
线性dp

线性动态规划是动态规划中比较简朴的一类问题,他的状态转移是线性的,即状态的转移是固定的,常见的如从前到后,或者从后到前。线性动态规划和递推比较类似,在很多情况下,这两种做法大致是相同的。一般的,递推是当前要求解的答案和前面某个固定答案有关,而线性动态规划是当前答案和前面的某个答案存在关系,这个位置在不同的情况下是不相同的。
最长上升子序列

言归正传,我们继承聊线性dp。
子集和子序列和子串的区别

以\(abfsgegsas\)为例,\(faggas\)是它的子集,由于子集是不计顺序的,\(abggss\) 则是他的子序列,由于子序列是要求有顺序的,而\(abf\)则是他的字串
内容分析

决策对象
每个位置上的数。
阶段
共有 \(n\) 个数,因此有 \(n\) 个阶段。
状态
由于每个数都有可能是子序列的结尾,所以利用 dp 表示以第 \(i\) 个数作为结尾的最长上升子序列的长度。
决策
如果以第 \(i\) 个数作为结尾,那么在这个序列中,上一个数肯定要小于 \(a\)。因此,我们需要在前面的数中找到比 \(a\) 小的数,而且我们应该选择以这个数结尾的最长上升子序列中最长的那个,这样接在这个数后面得到的序列也是最长的。

状态转移方程
如果 \(h[k]>n;        for (int i=1;i>a;                dp=1;        }                for (int i=1;ib;    dp[0][0]=0;    for (int i=1;ib;        dp[0][0]=0;        for (int i=1;i>n;        while (1){                int a,b,c;                cin>>a>>b>>c;                if (a==0&&b==0&&c==0)break;                mp[a]=c;        }        for (int i=1;ib>>c;                if (a==0&&b==0&&c==0)break;                mp[a]=c;        }        for (int i=1;i

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

盛世宏图

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表