ZOJ 1136 Longest Ordered Subsequence DP
传送门: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; }
新 blog : www.hrwhisper.me