• poj 3670(LIS)


     1 // File Name: 3670.cpp
     2 // Author: Missa_Chen
     3 // Created Time: 2013年07月08日 星期一 21时15分34秒
     4 
     5 #include <iostream>
     6 #include <string>
     7 #include <algorithm>
     8 #include <cstdio>
     9 #include <cstring>
    10 #include <cmath>
    11 #include <queue>
    12 #include <map>
    13 #include <stack>
    14 #include <set>
    15 #include <cstdlib>
    16 #include <vector>
    17 #include <time.h>
    18 
    19 using namespace std;
    20 
    21 #define LL long long
    22 const int inf = 0x3f3f3f3f;
    23 const int maxn = 3e4 + 5;
    24 int a[maxn], dp[maxn], D[maxn], len, n;
    25 //dp[i]表示以第i个元素为子序列最后一个元素的LIS长度。
    26 //D[len]表示上升子序列长度为len的最后一个元素。
    27 int LIS()
    28 {
    29     len = 0;
    30     memset(dp, 0, sizeof(dp));
    31     memset(D, 0, sizeof(D));
    32     int ret = 0;
    33     for (int i = 1; i <= n; ++i)
    34     {
    35         if (a[i] >= D[len])
    36         {
    37             dp[i] = len + 1;
    38             D[++len] = a[i];
    39         }
    40         else
    41         {
    42             int low = 1, high = len, tmp = 0;
    43             while (low <= high)
    44             {
    45                 int mid = (low + high) >> 1;
    46                 if (D[mid] <= a[i])
    47                 {
    48                     tmp = mid;
    49                     low = mid + 1;
    50                 }
    51                 else
    52                     high = mid - 1;
    53             }
    54             dp[i] = tmp + 1;
    55             D[tmp + 1] = a[i];
    56         }
    57         ret = max(ret, dp[i]);
    58     }
    59     return ret;
    60 }
    61 int main()
    62 {
    63     while (~scanf("%d",&n))
    64     {
    65         for (int i = 1; i <= n; ++i)
    66             scanf("%d", &a[i]);
    67         int ans = LIS();
    68         reverse(a + 1, a + n + 1);
    69         ans = max(ans, LIS());
    70         printf("%d
    ", n - ans);
    71     }
    72     return 0;
    73 }
  • 相关阅读:
    构建之法阅读笔记07
    7-第一阶段SCRUM冲刺
    第一阶段个人冲刺博客第十天
    第一阶段个人冲刺博客第九天
    第九周学习进度博客
    java项目(学习和研究)
    让计算机干活
    os基础
    树和图的一些算法
    java代码理解
  • 原文地址:https://www.cnblogs.com/Missa/p/3178990.html
Copyright © 2020-2023  润新知