zoukankan      html  css  js  c++  java
  • P1091 合唱队形

    题意:有n名学生在成一排。然后为了站成中间高两边矮的合唱队列,问最少 不要几个人?

    思路:

    就是最长上升子序列裸用。当然是先把顺方向和逆方向的最长上升子序列找到。

    然后再枚举从哪里分,顺方向和逆方向的最长上升子序列的长度之和最长。

    其实蛮简单

    代码如下:

    #include<iostream>
    #include<algorithm>
    using namespace std;
    int n, num[105];
    int dp[2][105];
    int main()
    {
        cin >> n;
        for (int i = 1; i <= n; i++)
            cin >> num[i];
        for (int i = 1; i <= n; i++)
        for (int i = 1; i <= n;++i)
        for (int j = 0; j < i; ++j)if (num[i] > num[j]) dp[0][i] = max(dp[0][i], dp[0][j] + 1);
        //j从0开始,就不用开始给dp赋值为1
        for (int i = n; i >= 1;--i)
        for (int j = n + 1; j > i; --j)if (num[i] > num[j])dp[1][i] = max(dp[1][i], dp[1][j] + 1);
        
        int ans = 0;
        for (int i = 1; i <= n; ++i)
            ans = max(dp[0][i] + dp[1][i] - 1, ans);
        cout << n - ans << endl;
    }
  • 相关阅读:
    典型用户及场景分析
    使用搜狗输入法个人感受
    第二期站立会议10
    寻找“水王”
    第二期站立会议9
    第二期站立会议8
    第二期站立会议7
    第二期站立会议6
    第二期站立会议5
    第二期站立会议4
  • 原文地址:https://www.cnblogs.com/ALINGMAOMAO/p/9489789.html
Copyright © 2011-2022 走看看