动态规划的模型构建

动态规划的模型构建

ID:44995894

大小:518.50 KB

页数:90页

时间:2019-11-07

动态规划的模型构建_第1页
动态规划的模型构建_第2页
动态规划的模型构建_第3页
动态规划的模型构建_第4页
动态规划的模型构建_第5页
资源描述:

《动态规划的模型构建》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、动态规划的模型构建及其一般优化方法长沙市雅礼中学朱全民NOIP的动态规划试题加分二叉树(2003)—树型动态规划合唱队形(2004)—线型动态规划青蛙过河(2005)—线型动态规划能量项链(2006)—合并类型动态规划金明的预算方案(2006)—资源类型动态规划矩阵取数游戏(2007)—规则类型动态规划传纸条(2008)—规则类型动态规划星球贸易(2009))—线型动态规划乌龟棋(2010))—线型动态规划动态规划的基本概念阶段状态决策转移无后效性最优性原理动态规划的时间复杂度动态规划算法的时间复杂度=阶段数*每个阶段状

2、态转移的状态数*每次状态转移的时间或者:状态总数*每次状态转移的时间重点:减少每个阶段的状态数,也就是减少了状态总数编程实现?循环Fori…Forj…(dummy)递归Solve(i,j)Ifsolvedf[i][j]returnf[i][j](dummy)问题1:拦截导弹给定N个数求最长的不上升子序列长度求最少有多少个不上升序列能覆盖所有的数,即求最少覆盖序列。N<=1000.分析设f(i)表示前i个数的最长不上升序列的长度。则,f(i)=max{f(j)+1},其中j=a[i]这里0

3、。显然时间复杂度为O(n2)。上述式子的含义:找到i之前的某j,这个数不比第i个数小,对于所有的j取f(j)的最大值。问题2:乘积最大设有一个长度为N的数字串,要求选手使用K个乘号将它分成K+1个部分,找出一种分法,使得这K+1个部分的乘积最大。同时,为了帮助选手能够理解题意,主持人还举了如下一个例子:有一个数字串:312,当N=3,K=1时会有两种分法:⑴3*12=36⑵31*2=62这时,符合题目要求的结果是:31*2=62。现在,请你帮助你的好朋友XZ设计一个程序,求得正确的答案。分析假设s1‥si(2≤i≤n)中

4、插入j个‘*’。其中s1‥sk中插入了j-1个‘*’,即乘式中的第j+1项为sk+1‥si(j≤k≤i-1):设ans[i,j]—长度为i的数串中插入j个‘*’的最大乘积(整型数组)。显然,ans[i,0]=si…s1对应的整型数组;ans[i,j]=max{ans[k,j-1]*sk+1‥si}(1≤i≤n,1≤j≤min{i-1,m})问题3:求最长公共子序列给定的字符序列X=“x0,x1,…,xm-1”,序列Y=“y0,y1,…,yk-1”是X的子序列,存在X的一个严格递增下标序列,使得

5、对所有的j=0,1,…,k-1,有xij=yj。例如,X=“ABCBDAB”,Y=“BCDB”是X的一个子序列。给出两个字串S1和S2,长度不超过5000.求这两个串的最长公共子串长度。分析样例S1=“ABCBDAB.”S2=“BABCBD.”可以看出他们的最长公共子串有ABCB,ABCD,BCBD等,长度为4.从样例分析,我们思考的方式为要找出S1串与S2串的公共子串,假设将S1固定,从第1个位置开始直到最后一个位置为止,与S2的各个部分不断找最长公共子串当然S1也可以变化,这样我们即得出了思路:枚举S1的位置i枚举S

6、2的位置j找出S1的前i位与S2的前j位的最长公共子串,直到两个串的最后一个位置为止。动态规划设f(i,j)表示S的前i位与T的前j位的最长公共子串长度。则有,时间复杂度O(n*m)主程序框架n:=length(a);m:=length(b);fori:=1tonbeginforj:=1tomdobeginf[j]:=max(f[j-1],pf[j]);{从前面的状态直接转移过来}if(a[i]=b[j])and(pf[j-1]+1>f[j])then{多增加一位的情况}f[j]:=pf[j-1]+1;end;pf:=f

7、;end;说明:pf是一个与f完全相同的数组,实现f(i)与f(i-1)的滚动样例运行过程S=“ABCBDAB.”T=“BABCBD.”初始:f(i,0)=0,f(0,i)=0;∵S[1]≠T[1];∴f(1,1)=MAX{f(1,0),f(0,1)}=0∵S[1]=T[2];∴f(1,2)=MAX{f(1,0)+1}=1∵S[2]=T[1];∴f(2,1)=MAX{f(1,0)+1}=1∵S[2]≠T[2];∴f(2,2)=MAX{f(1,2),f(2,1)}=1∵S[2]=T[3];∴f(2,3)=MAX{f(1,2

8、)+1}=2∵S[3]≠T[1];∴f(3,1)=MAX{f(3,0),f(2,1)}=1∵S[3]≠T[2];∴f(3,2)=MAX{f(2,2),f(3,1)}=1∵S[3]≠T[3];∴f(3,3)=MAX{f(3,2),f(2,3)}=2……一直求到f(8,7),ans=f(8,7)-1;减1是因为最后都有一

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。