第三章作业
单调递增最长子序列
设计一个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,n],填表顺序为从左往右。
1.3 分析该算法的时间和空间复杂度
因为有两重循环,所以空间复杂度为o(n),时间复杂度为o(n²)。
2. 你对动态规划算法的理解
动态规划思想是将问题分解为多个子问题,通过求解子问题来得到最终答案,而动态规划的关键和分治算法一样在于想到分解问题的最简便的方法,然后通过填表,避免了重复计算的问题,最后自下而上求出最优解。
3. 说明结对编程情况
我向搭档请教了很多,有不会的就会一起讨论,最后成功写出了代码