1. 作业题 单调递增最长子序列题分析。
代码
#include <iostream> using namespace std; int a[200]; int Max_xulie(int n){ int b[200]; b[0] = 1; int max = 1; for(int i=1;i<n;i++){ int k=0; for (int j=0;j<i;j++){ if(a[i]>a[j]){ k = b[j]; b[i] = k+1; } if(max < b[i]){ max = b[i]; } } } return max; } int main(){ int n; cin >> n; for (int i=0;i<n;i++){ cin >> a[i]; } cout << Max_xulie(n) << endl; return 0; }
1.1 根据最优子结构性质,列出递归方程式,
b[i] = b[j]+1 ; ( 0<j<i , a[i] > a[j] )
1.2 给出填表法中表的维度、填表范围和填表顺序。
维度 一维数组b[i]
填表范围 0->n
填表顺序 从左往右
1.3 分析该算法的时间和空间复杂度
时间 O(n^2)[i j 双循环]
空间 O ( n ) [一维数组]
2. 你对动态规划算法的理解
分解问题成若干子问题,从最根源的情况演算出最后所要的最优解,必须找到算法中上层子问题所需要的下层数据,并且需防止子问题的重复计算。
3. 说明结对编程情况
逐渐默契,都能听懂对方的意思了。