C语言动态规划初步

C语言动态规划初步

ID:38833851

大小:315.82 KB

页数:18页

时间:2019-06-20

C语言动态规划初步_第1页
C语言动态规划初步_第2页
C语言动态规划初步_第3页
C语言动态规划初步_第4页
C语言动态规划初步_第5页
资源描述:

《C语言动态规划初步》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、ACM程序设计福州大学至诚学院冯新2021/7/171第九讲动态规划初步2021/7/172一、经典问题:数塔问题有形如下图所示的数塔,从顶部出发,在每一结点可以选择向左走或是向右走,一直走到底层,要求找出一条路径,使路径上的值最大。2021/7/173Input输入数据首先包括一个整数C,表示测试实例的个数,每个测试实例的第一行是一个整数N(1<=N<=100),表示数塔的高度,接下来用N行数字表示数塔,其中第i行有个i个整数,且所有的整数均在区间[0,99]内Output对于每个测试实例,输出可能得到的最大和,每个实例的输出占一行。SampleIn

2、put15738810274445265SampleOutput302021/7/174用暴力的方法,可以吗?2021/7/175这道题如果用枚举法(暴力思想),在数塔层数稍大的情况下(如31),则需要列举出的路径条数将是一个非常庞大的数目(2^30=1024^3>10^9=10亿)。试想一下:2021/7/176拒绝暴力,倡导和谐~2021/7/177从顶点出发时到底向左走还是向右走应取决于是从左走能取到最大值还是从右走能取到最大值,只要左右两道路径上的最大值求出来了才能作出决策。同样,下一层的走向又要取决于再下一层上的最大值是否已经求出才能决策。这

3、样一层一层推下去,直到倒数第二层时就非常明了。如数字2,只要选择它下面较大值的结点19前进就可以了。所以实际求解时,可从底层开始,层层递进,最后得到最大值。结论:自顶向下的分析,自底向上的计算。考虑一下:2021/7/178有公式:MaxSum[r][j]=a[r][j]r=N=Max(MaxSum[r+1][j],MaxSum[r+1]j+1)+a[r][j]r=其他2021/7/179intmain(){inta[100][100];intsum[100][100];intt,i,j;scanf("%d",&t);while(t--){intn;s

4、canf("%d",&n);for(i=0;i=0;i--)for(j=0;j<=i;j++){sum[i][j]=a[i][j];if(i!=n-1)sum[i][j]=max(sum[i+1][j],sum[i+1][j+1])+sum[i][j];}printf("%d",sum[0][0]);}return0;}#includeintmax(inta,intb){if(a>b)returna;elseretur

5、nb;}2021/7/1710许多求最优解的问题可以用动态规划来解决。用动态规划解题首先要把原问题分解成若干个子问题,子问题的解一旦求出就被保存。找到子问题,就意味着找到了将整个问题逐渐分解的办法,因为子问题可以用相同的思路分解成子问题,一直分解下去,直到最底层规模最小的问题一目了然看出解。每层问题的解决,会导致上层问题的解决,逐层向上,就会导致整个问题的解决,我们可采取自底层的子问题开始,自底向上的推导出一个个子问题的解。2021/7/1711二、经典问题:最长有序子序列2021/7/1712二、经典问题:最长有序子序列问题描述一个数的序列bi,当b

6、1

7、数,这些整数的取值范围都在0到10000。输出要求最长上升子序列的长度。输入样例71735948输出样例42021/7/1714二、经典问题:最长有序子序列如何把这个问题分解成子问题呢?经过分析,发现“求以ak(k=1,2,3…N)为终点的最长上升子序列的长度”是个好的子问题――这里把一个上升子序列中最右边的那个数,称为该子序列的“终点”。虽然这个子问题和原问题形式上并不完全一样,但是只要这N个子问题都解决了,那么这N个子问题的解中,最大的那个就是整个问题的解。MaxLen(1)=1MaxLen(k)=Max{MaxLen(i):1

8、且k≠1}+1MaxLen(k)的值,就是在ak左边,“终点”数值小于ak,且长度最大的那个上

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

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

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