算法第三章作业

单调递增最长子序列
#include<iostream>
using namespace std;
int main()
{ int n;
int a[1000];
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
int b[1000]={0};
b[1]=1;
int max=0;
for(int i=2;i<=n;i++){
int k=0;
for(int j=1;j<i;j++){
if(a[j]<=a[i]&&k<b[j]){
k=b[j];
b[i]=k+1;
}
if(max<b[i]){
max=b[i];
}
}
}

cout<<max;
return 0;
}
递归方程式:
len[i]={max(len[j])+1}
维度:一维数组
填表范围及顺序:整个序列,从左往右。
时间复杂度:o(n^2)
空间复杂度:o(n)

对动态规划的理解:
动态规划法是将问题分成若干个子问题,分别计算子问题的解并记录填表,最后递归得到原先问题的终解,其与分治法类似,但避免了分治法多次计算重复子问题。
结对编程情况:
结对编程:在互相学习中发现对方的问题及时改正,还能相互督促。

posted @ 2020-11-01 10:11  陈茹容  阅读(54)  评论(0编辑  收藏  举报