top1编程
← 返回题目
题解

合唱队形

1 条题解

  • 0
    @ 2026-7-29 0:20:52
    #include <bits/stdc++.h>
    using namespace std;
    
    int main(){
    	long long n;
    	cin >> n;
    	long long a[105] = {0};
    	for (int i=1;i<=n;i++){
    		cin >> a[i];
    	}
    	long long dp1[105] = {0}, dp2[105] = {0};
    	for (int i=1;i<=n;i++){
    		for (int j=0;j<i;j++){
    			if (a[j] < a[i]){
    				dp1[i] = max (dp1[i], dp1[j]+1);
    			}
    		}
    	}
    	long long ma = -1;
    	for (int i=n;i>=0;i--){
    		for (int j=n+1;j>i;j--){
    			if (a[j] < a[i]){
    				dp2[i] = max (dp2[i], dp2[j]+1);
    			}
    		}
    		for (int j=1;j<=n;j++){
    			ma = max (ma, dp1[j]+dp2[j]-1);
    		}
    	}
    	cout << n - ma;
    	return 0;
    	//完结撒花 
    }
    
    • 1