1. 程式人生 > >Luogu1091 合唱隊形

Luogu1091 合唱隊形

out mes main ostream return 合唱隊 () turn 最長

線性動態規劃

思路:一遍算出最長不降子序列,再一遍算出最長不升子序列,再一遍歷維護max求出答案。

#include<iostream>
using namespace std;
int n,t[105],fd[105],ans,fu[105];
int main(){
    cin>>n;
    for(int i=1;i<=n;i++)
        cin>>t[i];
    for(int i=1;i<=n;i++)
        for(int j=0;j<i;j++)
            if(t[i]>t[j])
                fd[i]=max(fd[i],fd[j]+1
); for(int i=n;i>0;i--) for(int j=n+1;j>i;j--) if(t[i]>t[j]) fu[i]=max(fu[i],fu[j]+1); for(int i=1;i<=n;i++) ans=max(ans,fu[i]+fd[i]-1); cout<<n-ans; return 0; }

Luogu1091 合唱隊形