01: 最长上升子序列
最典型的动态规划问题,先将数组元素存入数组p【】,用max【i】表示以i为结尾的最长子序列的长度,得递推公式max【i】=max{ max【1......i-1】}+1;双重循环递推即可。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,i,j,sum=0;
int p[1000];
int max[1000];
cin>>n;
for(i=0;i<n;i++)
{
cin>>p[i];
}
int maxx=1;
max[0]=1;
for(i=1;i<n;i++) //以 i结尾的长度
{
int temp=0;
for(j=0;j<i;j++) //前面以 j结尾的长度
{
if(p[i]>p[j])
{
if(temp<max[j]) //并求 max【j】的最大值
{
temp=max[j];
}
}
}
max[i]=temp+1; //+1
if(maxx<max[i])
maxx=max[i];
}
cout<<maxx<<endl;
return 0;
}