给定一个序列,求它的一个递增子序列,使它的元素个数尽量多,求该序列的最长上升子序列中元素个数。例如序列1,6,2,5,4,7的最长上升子序列是1,2,5,7或1,2,4,7,则其最长上升子序列中的元素个数为4。
输入格式:
第一行中输入序列的个数(不超过20),第二行中输入每个元素,以空格隔开。
输出格式:
输出该序列中最长上升子序列中的元素个数。
输入样例:
6
1 6 2 5 4 7
输出样例:
4
代码区:
#include<iostream>
using namespace std;
int main()
{
int maxn=0;
int a[21],b[22]={1};
int n;cin>>n;
for(int i=0;i<n;i++)
cin>>a[i];
for(int i=1;i<n;i++)
{
for(int j=0;j<i;j++)
{
if(a[j]<a[i]&&b[j]>=b[i])
{
b[i]=b[j]+1;
if(b[i]>maxn) maxn=b[i];
}
}
}
cout<<maxn;
}
(注:动态规划的原则是保存所有状态下的最优解)