传送门:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1136
题目大意:给定一串序列,求最长的升序列长度,如1, 7, 3, 5, 9, 4, 8 最长的为 1, 3, 5, 8 输出4
进行DP,设dp [ i] 为 以 i 结尾的升序列的最大值,那么从 i 开始向前查找,若 a[ j ] < a [ i ] 则 比较一下 dp的大小
一开始我只找最靠近它的比它小的数,wa了一次。
如:
1
9
1 9 2 10 11 12 5 6 13
应该输出6
#include<cstdio>
#include<cstring>
const int MAXN=1024;
int a[MAXN];
int dp[MAXN];
int main()
{
int kase;
scanf("%d",&kase);
while(kase--)
{
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
dp[1]=1;
for(int i=2;i<=n;i++)
{
int temp=0;
for(int j=i;j>=1;j--)
{
if(a[i] > a[j])
{
temp = temp> dp[j] ? temp: dp[j];
}
}
dp[i]=temp+1;
}
int ans=0;
for(int i=1;i<=n;i++)
ans= ans>dp[i]? ans:dp[i];
printf("%d\n",ans);
if(kase)
printf("\n");
}
return 0;
}