动态规划的模型构建.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
动态规划的模型构建

算法三 我们来整理在求F(i)的时候,用队列维护S(i-k)所需要的操作: ☆若当前队首元素S(x),有xi-m,则S(x)出队;直到队首元素S(x)有x=i-m为止。 ☆若当前队尾元素S(k)=S(i-1),则S(k)出队;直到S(k)S(i-1)为止。 ☆在队尾插入S(i-1) ☆取出队列中的最小值,即队首元素。 算法三 由于对于求每个F(i)的时候,进队和出队的元素不止一个。 但是我们可以通过分摊分析得知,每一个元素S(i)只进队一次、出队一次,所以队列维护的时间复杂度是O(n)。而每次求F(i)的时候取最小值操作的复杂度是O(1),所以这一步的总复杂度也是O(n)。 综上所述,该算法的总复杂度是O(n) 问题10:理想收入问题 理想收入是指在股票交易中,以1元为本金可能获得的最高收入,并且在理想收入中允许有非整数股票买卖。 已知股票在第i天每股价格是V[i]元,1≤i≤M,求M天后的理想收入。 方法一 设F[i]表示在第i天收盘时能达到的最高收入,则有F[i]的递推关系式: 公式含义:在第i天收盘时能达到的最高的收入,是将第j天收盘后的收入,全部用于买入第k天的股票,再在第i天将所持的股票全部卖出所得的收入。 时间复杂度是O(M3)。 方法二 设P[i]表示前i天能获得的最多股票数,则可列出状态转移方程: 设Q[i]表示前i天能达到的最大收入,则可列出状态转移方程: 时间复杂度是O(M2)。 方法三 分析:上述公式的含义是当0=ji 时,求Q[i-1]和Q[j]*v[i]/v[j]的最大值 对于0=ji,要求Q[i],实际上Q[1]…Q[i-1]都已经求出,因此我们只要搞一个变量保存Q[j]/V[j] 的最大值即可,记为MaxQ. 这样,公式可以写成 对每次求出的Q[i],都更新MaxQ,时间复杂度为O(M) 问题11:青蛙过河 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧。在桥上有一些石子,青蛙很讨厌踩在这些石子上。由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙可能到达的点看成数轴上的一串整点:0,1,……,L(其中L是桥的长度)。坐标为0的点表示桥的起点,坐标为L的点表示桥的终点。青蛙从桥的起点开始,不停的向终点方向跳跃。一次跳跃的距离是S到T之间的任意正整数(包括S,T)。当青蛙跳到或跳过坐标为L的点时,就算青蛙已经跳出了独木桥。 题目给出独木桥的长度L,青蛙跳跃的距离范围S,T,桥上石子的位置。你的任务是确定青蛙要想过河,最少需要踩到的石子数。 【输入文件】 输入文件river.in的第一行有一个正整数L(1 = L = 109),表示独木桥的长度。第二行有三个正整数S,T,M,分别表示青蛙一次跳跃的最小距离,最大距离,及桥上石子的个数,其中1 = S = T = 10,1 = M = 100。第三行有M个不同的正整数分别表示这M个石子在数轴上的位置(数据保证桥的起点和终点处没有石子)。所有相邻的整数之间用一个空格隔开。 【输出文件】 输出文件river.out只包括一个整数,表示青蛙过河最少需要踩到的石子数。 【样例输入】 10 2 3 5 2 3 5 6 7 【样例输出】 2 【数据规模】 对于30%的数据,L = 10000; 对于全部的数据,L = 109。 分析 由于不能往回跳,很容易想到用动态规划解决这个题目。 设f(i)表示跳到第i个点需要踩到的最少石子数,则很容易写出动态规划的状态转移方程: 时间复杂度是O(L*(T-S)),但本题的L高达109,根本无法承受! 进一步分析 我们先来考虑这样一个问题:长度为k的一段没有石子的独木桥,判断是否存在一种跳法从一端正好跳到另一端。 若ST,事实上对于某个可跳步长区间[S,T],必然存在一个MaxK使得任何k=MaxK,都可以从一端正好跳到另一端。 题设中1=S=T=10,经过简单推导或者程序验证就可以发现,取MaxK=100就能满足所有区间。 于是我们可以分两种情况讨论: 1. S=T时: 这时候由于每一步只能按固定步长跳,所以若第i个位置上有石子并且i mod S=0那么这个石子就一定要被踩到。这是我们只需要统计石子的位置中哪些是S的倍数即可。复杂度O(M) 2. ST时: 首先我们作如下处理:若存在某两个相邻石子之间的空白区域长度MaxK+2*T,我们就将这段区域缩短成长度为MaxK+2*T。可以证明处理之后的最优值和原先的最优值相同。 a b 如上图所示,白色点表示连续的一长段长度大于MaxK+2*T的空地,黑色点表示石子。设原先的最优解中,白色段的第一个被跳到的位置a,最后一个被跳到的位置是b,则在做压缩处理之后,a和

文档评论(0)

haihang2017 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档