算法第三章作业——“单调递增最长子序列”

7-1 单调递增最长子序列
设计一个O(n2)时间的算法,找出由n个数组成的序列的最长单调递增子序列。
输入格式:

输入有两行: 第一行:n,代表要输入的数列的个数 第二行:n个数,数字之间用空格格开
输出格式:

最长单调递增子序列的长度
输入样例:

在这里给出一组输入。例如:
5
1 3 5 2 9
输出样例:

在这里给出相应的输出。例如:
4

1.1 根据最优子结构性质,列出递归方程式

dp[i]=max(dp[j],dp[i]-1)+1;

1.2 给出填表法中表的维度、填表范围和填表顺序。

所填的表为数组,维度:1维  填表范围:0<i<n 填表顺序:自左向右

1.3 分析该算法的时间和空间复杂度

两重循环,所以空间复杂度为o(n),时间复杂度为o(n²)。

2. 你对动态规划算法的理解

首先了解什么是问题的最优子结构,如何找到最优子结构。动态规划算法具有最优子结构、子问题重叠、边界和子问题独立四个性质。将一个问题拆分成几个子问题,分别求解这些子问题,即可推出大问题的解。而动态规划的优势在于,动态规划防止了子问题的重复计算,每个问题只计算一次,自底向上地求出原问题的解。

3. 说明结对编程情况

跟结对编程的伙伴的想法有时可能相差较大,这个时候都是互相讲解各自的解题思路,互相完善,在此同时,不同的思路也多少有共通的地方,或者是互相弥补,这使得编的程序更经得起检验。

posted @ 2020-10-31 23:10  我就是不会玩  阅读(637)  评论(0编辑  收藏  举报