首页 > 其他 > 详细

DP专题之LIS(Longest Increasing Subsequence)

时间:2015-03-22 16:19:10      阅读:123      评论:0      收藏:0      [点我收藏+]

 

题目地址:http://poj.org/problem?id=2533

 1 /*
 2     LIS(Longest Increasing Subsequence)裸题:
 3         状态转移方程:dp[i] = max (do[i], dp[j] + 1)   (1 <= j < i)
 4         附带有print输出路径函数
 5 */
 6 #include <cstdio>
 7 #include <algorithm>
 8 #include <cstring>
 9 using namespace std;
10 
11 const int MAXN = 1e3 + 10;
12 int a[MAXN];
13 int dp[MAXN];
14 int rt[MAXN];
15 
16 void print(int id, int n)
17 {
18     if (rt[id] != -1)
19     {
20         print (rt[id], n);
21     }
22     printf ("%d%c", a[id], (id == n) ? \n :  );
23 }
24 
25 int main(void)      //POJ 2533 Longest Ordered Subsequence
26 {
27     //freopen ("LIS.in", "r", stdin);
28 
29     int n;
30     scanf ("%d", &n);
31     for (int i=1; i<=n; ++i)
32     {
33         scanf ("%d", &a[i]);
34     }
35 
36     int res = 0;
37     for (int i=1; i<=n; ++i)
38     {
39         dp[i] = 1;  rt[i] = -1;
40         for (int j=1; j<i; ++j)
41         {
42             if (a[j] < a[i])
43             {
44                 if (dp[i] < dp[j] + 1)
45                 {
46                     dp[i] = dp[j] + 1;
47                     rt[i] = j;
48                 }
49             }
50         }
51         res = max (res, dp[i]);
52     }
53 
54     printf ("%d\n", res);
55     //print (n, n);
56 
57     return 0;
58 }

DP专题之LIS(Longest Increasing Subsequence)

原文:http://www.cnblogs.com/Running-Time/p/4357391.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!