一. 对动态规划算法的理解
动态规划算法类似于递归算法,但递归时常会出现冗杂繁重且庞大的计算量,程序运行的速度也比较慢。进行动态规划算法使用时一般都需列出递归方程,然后分成子问题,分析最优解,大大降低了时间复杂度;类比分治法,此处的子问题并非毫无关联,而是一个问题的解是根据已经得到的另一子问题的解得到
课本所示动态规划算法的步骤大概分成四步:
(1)找出最优解的性质,并刻画其结构特征
(2)递归地定义最优值
(3)以自底向上的方式计算最优值
(4)根据计算最优值时得到的信息构造最优解
2. 分别列出编程题1、2的递归方程
第一题递归部分的代码:
1 for(int i=1;i<n;i++){ 2 for(int j=0;j<i;j++){ 3 if(a[i]>a[j]&&max[i]<max[j]+1){ 4 max[i]=max[j]+1; 5 } 6 } 7 } 8 int MAX=0; 9 for(int i=0;i<n;i++){ 10 if(MAX<max[i]) 11 MAX=max[i]; 12 }
第二题递归部分代码:
1 for(int i=2;i<=n;i++) 2 { 3 for(int j=i+1;j<=n;j++) 4 { 5 int k=j-i; 6 for(int p=k;p<j;p++) 7 { 8 if(cost[k][j]>cost[k][p]+cost[p][j]) 9 cost[k][j]=cost[k][p]+cost[p][j]; 10 } 11 } 12 }
3. 说明结对编程情况
第一二题上课老师讲了之后我们换了个方法重新打了一遍,比较简单能够实现,但是第三题挖地雷的题讨论了很久且有出现答案正确但是不能在PTA中通过的情况,最终还是成功通过了,结队的效率一定上集合了两个人的想法,做题效率更高、打代码途中出现的问题也能迅速纠正。