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

    题目链接

    思路

    正难则反。
    求出保留的,即最长上升子序列,从头和从尾各求一遍,最后枚举出最大的保留的位数,
    然后用 (n) 减去保留位数加 (1) 即可。

    代码

    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    const int MAXN = 101;
    int n ,a[MAXN] ,ans = 0;
    int dp[MAXN] ,dp_[MAXN];
    int main () {
    	scanf ("%d",&n);
    	for (int q = 1;q <= n;++ q) {
    		dp[q] = dp_[q] = 1;
    		scanf ("%d",&a[q]);
    	}
    	for (int q = 1;q <= n;++ q) {
    		for (int w = q - 1;w >= 1;-- w) {
    			if (w < dp[q]) break;
    			if (a[q] > a[w]) {
    				dp[q] = max (dp[q] ,dp[w] + 1);
    			}
    		}
    	}
    	for (int q = n;q >= 1;-- q) {
    		for (int w = q + 1;w <= n;++ w) {
    			if (n - w + 1 < dp_[q]) break;
    			if (a[q] > a[w]) {
    				dp_[q] = max (dp_[q] ,dp_[w] + 1);
    			}
    		}
    	}
    	for (int q = 1;q <= n;++ q)
    		ans = max (ans ,dp[q] + dp_[q]);
    	printf ("%d
    ",n - ans + 1);
    	return 0;
    }
    
    
    cb
  • 相关阅读:
    构建之法阅读笔记02
    四则运算出题2
    初学delphi
    学习进度第一周
    构建之法阅读笔记01
    四则运算出题1
    个人介绍
    每日工作总结08
    构建之法阅读笔记03
    每日工作总结07
  • 原文地址:https://www.cnblogs.com/tuscjaf/p/13834376.html
Copyright © 2011-2022 走看看