ZOJ 1136 Longest Ordered Subsequence DP

来源:互联网 发布:云计算的主要特征 编辑:程序博客网 时间:2024/04/30 18:18

传送门: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;}