| 比赛 | 动态规划练习2 | 评测结果 | AAAAAEAAAA | 
    | 题目名称 | 最长上升子序列 | 最终得分 | 90 | 
    | 用户昵称 | Menamovic | 运行时间 | 0.005 s | 
    | 代码语言 | C++ | 内存使用 | 0.29 MiB | 
    | 提交时间 | 2017-03-28 19:03:46 | 
显示代码纯文本
#include<iostream>
#include<cstdio>
using namespace std;
int n;
int i,j,k,l;
int b[1200][10];
int main()
{
	freopen("lis1.in","r",stdin);
	freopen("lis1.out","w",stdout);
	scanf("%d",&n);
	for(i=1;i<=n;i++)
	{
		scanf("%d",&b[i][1]);
		b[i][2]=1;b[i][3]=0;
	}
	for(i=n-1;i>=1;i--)
	{
		l=0;k=0;
		for(j=i+1;j<=n;j++)
		{
			if((b[j][1]>b[i][1])&&(b[j][2]>l))
			{
				l=b[j][2];
				k=j;
			}
			if(l>0)
			{
				b[i][2]=l+1;b[i][3]=k;
			}
		}
	}
	k=1;
	for(j=1;j<=n;j++)
	{
		if(b[j][2]>b[k][2])  k=j;
	}
	printf("%d\n",b[k][2]);
	/*while(k!=0)
	{
		printf("%d ",b[k][1]);
		k=b[k][3];
	}*/
}