林思婷

导航

算法第三章作业

一.对动态规划法的理解

1.基本思想概念:

与分治法相似,将待求解的问题分解成诺干个子问题,先求解子问题,然后从这些子问题的解得到问题的解。然而,当子问题数目太多,最后解决原问题需要耗费指数时间时,采用分治法是不理想的,这时候运用动态规划法,将已解决的子问题的解保存起来,在需要时再找出已求得的答案,避免大量额重复计算,从而获得多项式时间算法。

2.基本要素:

(1)最优子结构

(2)重叠子问题

(3)备忘录方法

3.步骤设计:

(1)找出最优解的性质,并刻画其结构特征;

(2)递归地定义最优值;

(3)自底向上的方法计算出最优值;

(4)根据计算最优值时得到的信息,构造最优解。

 

二:7-1

int maxArray(int n, int array[]){
int *max = new int[n];
for(int i = 0; i < n; i++){
max[i] = 1;
}//设置一个数组来存放每个数组下标对应的最长递增子序列;

for(int i = 1; i < n; i++){
for(int j = 0; j < i; j++){
if(array[i] > array[j] && max[j] > max[i] - 1){
max[i] = max[j] + 1;//计算当前数组下标所含的最大递增数列(max的比较过滤掉对当前下标来说一样的数据)
}
}
}

int result = max[1];
for(int i = 0; i < n; i++){
if(max[i] > result){
result = max[i];
}
}
return result;
}

 

7-2

int leastRent(int n, int rent[100][100]){
for(int i = 2; i < n; i++){
for(int j = 0; j < n - i; j++){
int k = j + i;
for(int m = j + 1; m < k; m++){
int temp = rent[j][m] + rent[m][k];
if(temp < rent[j][k]){
rent[j][k] = temp;
}
}
}
}
return rent[0][n-1];

}

 

三:结队编程情况

我和我的同伴的考虑过用递归的方法来写,但由于我和我的同伴的太菜了,最终也没讨论出合适的递归方法,但还是有所收获在讨论过程,希望其他队的大佬们能向我们分享一下如何写出优秀代码

posted on 2018-11-04 17:12  林思婷  阅读(126)  评论(0编辑  收藏  举报