算法第3章作业

算法第3章作业

一、   你对动态规划算法的理解。

动态规划适用于最优解的问题。动态规划的基本思想是将待求问题分成若干个子问题,先求子问题,再从子问题的解得到原问题的解,它的子问题的解往往不是相互独立的。为避免大量的重复计算,动态规划会用一个表来记录已解决的子问题的答案。

二、  分别列出编程题1、2的递归方程。

编程题1:

for(int i=2;i<=n;i++){

b[i]=1;

for(int j=1;j<=i;j++){

if((a[i]>a[j])&&(b[j]>=b[i]))

b[i]=b[j]+1;

}

if(max<b[i])    max=b[i];

}

编程题2:

for(int i=n-1;i>0;i--) {  

for(int j=i+1;j<=n;j++) {

if(j-i==1) a[i][j]=a[i][j];

 else{

int temp;

for(int k=i+1;k<=j;k++) {

min=a[i][k]+a[k][j];

if(a[i][j]>min) {

a[i][j]=min;

  }}}}}

 

三、  说明结对编程情况。

本章动态规划我主要偏向于自我完成多一点,因为这一章确实比较难懂,需要借助书本上的知识和上网查阅。判断选择题不是很会做,经过翻书、上网和问同学与他们一起讨论,最终还是有点糊里糊涂的,不是很能理解。其中编程题2:租用游艇问题,对于填充数据,我还向谢思婷同学请教了循环填充数据的方式,首先分析了i<k<j,由此得图:

 

 

首先我们分析了以上图方法填表的方式,i是自下而上,就是从n-1到1;j是左左向右填表,即从i+1到n;对于k来说,就是比i大比j小,即从i+1到j;从而得出三个循环条件。此后,我们还强调了一种特殊情况,就是从第一站到第二站的时候,直接就等于本身。

 

posted @ 2018-11-10 20:23  zmkkkk  阅读(95)  评论(0编辑  收藏  举报