- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
如果y1=x1,即飞来的第一枚导弹被成功拦截。那么,根据题意“每一发炮弹都不能高于前一发的高度”,问题的状态将由s=∞变成s≤x1(x1为第一枚导弹的高度); 第二十九页,共八十四页,2022年,8月28日 在当前状态下,序列Y1={y2,…,yk}也应该是序列X1={x2,…,xn}的最长非递增子序列(大家用反证法很容易证明)。 也就是说,在当前状态s≤x1下,问题的最优解Y所包含的子问题(序列X1)的解(序列Y1)也是最优的。这就是拦截导弹问题的最优子结构性质。 第三十页,共八十四页,2022年,8月28日 设D(i)为第i枚导弹被拦截之后,这套系统最多还能拦截的导弹数(包含被拦截的第i枚)。 我们可以设想,当系统拦截了第k枚导弹xk,而xk又是序列X={x1,x2,…,xn}中的最小值,即第k枚导弹为所有飞来的导弹中高度最低的,则有D(k)=1;当系统拦截了最后一枚导弹xn,那么,系统最多也只能拦截这一枚导弹了,即D(n)=1;其它情况下,也应该有D(i)≥1。 第三十一页,共八十四页,2022年,8月28日 根据以上分析,可归纳出问题的动态规划递归方程为: 第三十二页,共八十四页,2022年,8月28日 假设系统最多能拦截的导弹数为dmax(即问题的最优值),则 dmax (i为被系统拦截的第一枚导弹的顺序号) 第三十三页,共八十四页,2022年,8月28日 所以,要计算问题的最优值dmax,需要分别计算出D(1)、D(2)、……D(n)的值,然后将它们进行比较,找出其中的最大值。 第三十四页,共八十四页,2022年,8月28日 根据上面分析出来的递归方程,我们完全可以设计一个递归函数,采用自顶向下的方法计算D(i)的值。然后,对i从1到n分别调用这个递归函数,就可以计算出D(1)、D(2)、……D(n)。 第三十五页,共八十四页,2022年,8月28日 但这样将会有大量的子问题被重复计算。比如在调用递归函数计算D(1)的时候,可能需要先计算D(5)的值;之后在分别调用递归函数计算D(2)、D(3)、D(4)的时候,都有可能需要先计算D(5)的值。如此一来,在整个问题的求解过程中,D(5)可能会被重复计算很多次,从而造成了冗余,降低了程序的效率。 第三十六页,共八十四页,2022年,8月28日 其实,通过以上分析,我们已经知道:D(n)=1。如果将n作为阶段对问题进行划分,根据问题的动态规划递归方程,我们可以采用自底向上的方法依次计算出D(n-1)、D(n-2)、……D(1)的值。这样,每个D(i)的值只计算一次,并在计算的同时把计算结果保存下来,从而避免了有些子问题被重复计算的情况发生,提高了程序的效率。 第三十七页,共八十四页,2022年,8月28日 int main(){ int h[2000],d[2000],count,c,max,i,j;//h表示高度值,d表示最优值,c是能拦截得最多导弹数 count=0; while(scanf(%d,h+count++)!=EOF); //输入高度 d[count-1]=1; c=1; for(i=count-2;i0;i--){ //用动态规划计算所有最优值 max=0; for(j=i+1;jcount;j++) if((h[i]=h[j]) maxd[j])max=d[j]; d[i]=max+1; if(cd[i])c=d[i]; } printf(%d\n,c); } 第三十八页,共八十四页,2022年,8月28日 思考题 上述问题修改成:要求拦截所有导弹,则需要多少套上述系统? 第三十九页,共八十四页,2022年,8月28日 实例POJ2122:Flight Planning Your job is to write a program that plans airplane flights. Each flight consists of a series of one or more legs. Your program must choose the best altitude for each leg to minimize the amount of fuel consumption during the trip. 第四十页,共八十四页,2022年,8月28日 The airplane has a fixed airspeed, given by the constant VCRUISE, and a most-efficient cruising altitude, AOPT. When flying at altitude AOP
原创力文档


文档评论(0)