题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1257
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 34892 Accepted Submission(s): 13793
思路:仔细分析一下,可以发现这道题就是求最长上升子序列(LIS)。比较基础的DP,不解释。
附上AC代码:
#include <bits/stdc++.h> using namespace std; const int maxn = 1005; int num[maxn]; int dp[maxn]; int n; int main(){ while (~scanf("%d", &n)){ for (int i=0; i<n; ++i) scanf("%d", num+i); for (int i=0; i<n; ++i){ dp[i] = 1; for (int j=0; j<i; ++j) if (num[i] > num[j]) dp[i] = max(dp[i], dp[j]+1); } int ans = 1; for (int i=0; i<n; ++i) ans = max(ans, dp[i]); printf("%d\n", ans); } return 0; }
