zoukankan      html  css  js  c++  java
  • 合唱队形 ( 双向LIS )

     1 #include <iostream>
     2 #include <stdio.h>
     3 #include <algorithm>
     4 
     5 using namespace std;
     6 
     7 int list[105];
     8 int dp1[105];
     9 int dp2[105];
    10 
    11 
    12 int main() 
    13 {
    14     int n;
    15     while(cin >> n)
    16     {
    17         for(int i = 1; i <= n; ++i)
    18             cin >> list[i];
    19         
    20         // 正反两次运用LIS 
    21         for(int i = 1; i <= n; ++i)
    22         {
    23             int tmax = 1;
    24             for(int j = 1; j < i; ++j)
    25             {
    26                 if(list[j] < list[i])
    27                 {
    28                     tmax = max(tmax, dp1[j] + 1);
    29                 }
    30             }
    31             
    32             dp1[i] = tmax;
    33         }
    34         
    35         for(int i = n; i >= 1; --i)
    36         {
    37             int tmax = 1;
    38             for(int j = n; j > i; --j)
    39             {
    40                 if(list[j] < list[i])
    41                 {
    42                     tmax = max(tmax, dp2[j] + 1);
    43                 }
    44             }
    45             
    46             dp2[i] = tmax;
    47         }
    48         
    49         // 当某个人左侧的LIS和右侧的LIS长度之和smax最大时,易知 n-smax+1即为答案(此处加1的原因是这个人重复算了一次,即多减了一次) 
    50         int smax = 0;
    51         for(int i = 1; i <= n; ++i)
    52         {
    53             if(dp1[i] + dp2[i] > smax)
    54                 smax = dp1[i] + dp2[i];
    55         }
    56         
    57         cout << n - smax + 1 << endl;
    58     }
    59     
    60     
    61     
    62     
    63     return 0;
    64 }
  • 相关阅读:
    DispatcherServlet
    上转型对象
    Javascript闭包(Closure)
    跨域
    dict
    Python 函数参数传递方式
    协同过滤
    白话 动态规划 第一节 初识动态规划
    Spring@Autowired注解与自动装配
    protected
  • 原文地址:https://www.cnblogs.com/FengZeng666/p/11105608.html
Copyright © 2011-2022 走看看