zoukankan      html  css  js  c++  java
  • 合唱队形(lgP1091)

    思路:

    先从左到右求一遍最长不下降子序列,再同样方法从右到左求一遍。

    然后我们枚举分界点,则总人数就是左边一半加上右边一半的人数。

    取最大值,输出答案。

    见注释。

    #include<bits/stdc++.h>
    using namespace std;
    int n,a[101],f1[101],f2[101],ans;
    int main()
    {
        cin>>n;
        for(int i = 1;i <= n;i ++) cin>>a[i];
        for(int i = 1;i <= n;i ++)//此处是从左到右求
        {
            for(int j = 0;j < i;j ++)
            {
                if(a[i] > a[j]) f1[i] = max(f1[i],f1[j] + 1);
            }
        }
        for(int i = n;i;i --)//从右到左求
        {
            for(int j = n + 1;j > i;j--)
            {
                if(a[i] > a[j]) f2[i] = max(f2[i],f2[j]+1);
            }
        }
        for(int i = 1;i <= n;i ++) ans = max(f1[i] + f2[i] - 1,ans);//枚举分界点并更新答案
        cout<<n-ans;
        return 0;
    }

    用时 25min  ,一遍过。

  • 相关阅读:
    2-SIFT简介
    1-SIFT资源整理
    1-vs2015+opencv 3.2.0配置
    5-load-on-startup
    4-监听器
    3-过滤器
    第09组 Alpha冲刺 (1/6)
    第09组(71) 需求分析报告
    第9组(71) 团队展示
    结对编程作业
  • 原文地址:https://www.cnblogs.com/ying-xue/p/14087915.html
Copyright © 2011-2022 走看看