标签:
7 1 7 3 5 9 4 8
4
//标准LIS最长递增子序列写法
#include<stdio.h>
#include<string.h>
int main (void)
{
int n;
int a[10100],liss[10100];
while(~scanf("%d",&n))
{
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
int max=0;
//18-19 直接把liss[]全部刷为1 正确
for(int i=0;i<n;i++)
liss[i]=1;
for(int i=1;i<n;i++)
{
for(int j=0;j<i;j++)
{
if(a[i]>a[j]&&liss[j]+1>liss[i])
{
liss[i]=liss[j]+1;
}
}
if(max<liss[i])
{
max=liss[i];
}
}
printf("%d\n",max);
}
return 0;
}
//WA写法
#include<stdio.h>
#include<string.h>
int main (void)
{
int n;
int a[10100],liss[10100];
while(~scanf("%d",&n))
{
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
/*
65-69行 这样写是wrong的 WA了很多次
因为不能每次改变liss[0]成为正确的数值
或者把liss[0]写到for循环里面 但是循环的初始i改成0 也是正确的
*/
liss[0]=1;
int max=0;
for(int i=1;i<n;i++)//注意i的循环初始值是1
{
liss[i]=1;
for(int j=0;j<i;j++)
{
if(a[i]>a[j]&&liss[j]+1>liss[i])
{
liss[i]=liss[j]+1;
}
}
if(max<liss[i])
{
max=liss[i];
}
}
printf("%d\n",max);
}
return 0;
}
POJ 2533 Longest Ordered Subsequence【最长递增子序列】【DP思想】
标签:
原文地址:http://blog.csdn.net/qq_24653023/article/details/51365577