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

    Luogu P1091 合唱队形

    先从$1$到$n$求一遍最长上升子序列,再反向从$n$到$1$求一遍最长上升子序列。最后遍历$1$到$n$得到两端相加最长的。记得输出是出列人数,所以要写$n-ans$。

    #include<bits/stdc++.h>
    #define N 110
    
    using namespace std;
    
    int n,ans;
    int a[N],f[N][2];
    
    void Read() {
    	scanf("%d",&n);
    	for(int i=1;i<=n;i++) {
    		scanf("%d",&a[i]);
    	}
    	return;
    }
    
    void Solve() {
    	for(int i=1;i<=n;i++) {
    		for(int j=0;j<i;j++) {
    			if(a[i]>a[j]) {
    				f[i][0]=max(f[i][0],f[j][0]+1);
    			}
    		}
    	}
    	for(int i=n;i>=1;i--) {
    		for(int j=n+1;j>i;j--) {
    			if(a[i]>a[j]) {
    				f[i][1]=max(f[i][1],f[j][1]+1);
    			}
    		}
    	}
    	for(int i=1;i<=n;i++) {
    		ans=max(ans,f[i][0]+f[i][1]-1);
    	}
    	printf("%d",n-ans);
    	return;
    }
    
    int main()
    {
    	Read();
    	Solve();
    	return 0;
    }
    
  • 相关阅读:
    WEB API&API
    event flow
    JS-for的衍生对象
    JS-function
    Object Constructor
    前端发展史
    JavaScript中document.getElementById和document.write
    正则表达式把Paul换成Ringo
    11th blog
    10th week blog
  • 原文地址:https://www.cnblogs.com/luoshui-tianyi/p/11630199.html
Copyright © 2011-2022 走看看