Luogu1091 合唱队形

线性动态规划

思路:一遍算出最长不降子序列,再一遍算出最长不升子序列,再一遍历维护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;
}

猜你喜欢

转载自www.cnblogs.com/pushinl/p/8964198.html