第三章作业
3-2 单调递增最长子序列 (25分) 设计一个O(n2)时间的算法,找出由n个数组成的序列的最长单调递增子序列。 输入格式: 输入有两行: 第一行:n,代表要输入的数列的个数 第二行:n个数,数字之间用空格格开 输出格式: 最长单调递增子序列的长度 输入样例: 在这里给出一组输入。例如: 5 1 3 5 2 9 输出样例: 在这里给出相应的输出。例如: 4 代码: #include<iostream> using namespace std; int main(){ int n; cin>>n; int a[n],b[n]; for(int i=0;i<n;i++) { cin>>a[i]; b[i]=1; } for (int i = 1; i < n; i++) { for (int j = 0; j < i; j++) { if (a[j] < a[i]&& b[j]>b[i] - 1) { b[i] = b[j] + 1; } } } int max=b[1]; for(int i=0;i<n;i++) {if(max<b[i]) max=b[i]; } cout<<max; } 1.1 当a[j] < a[i]且b[j]>b[i] - 1 ,answer=max{1,b[i]=b[j]+1} 1.2b[n]和a[n]均为一维,填表范围为1-n,顺序从1-n 1.3时间复杂度:双重循环:O(n^2) 空间复杂度:一维数组 O(n) 2、你对动态规划算法的理解 动态规划算法实际上是将大问题分成一个个小问题,然后确定好边界,在根据最优质结构性质,利用好递归方程式就可以得出答案。并且用备忘录的方式大大减少了算法的复杂度。 3.,这星期交流较少,两人用的方法不同,但后来互相讲解都能明白