rnqoj-28-合唱队形-最长上升子序列

来源:互联网 发布:光猫上网络g一直闪烁 编辑:程序博客网 时间:2024/05/16 12:27

想当年大一的时候,一个最长上升子序列的问题使得我的罚时上升了不少。。。。当年还是图样啊

这道题目本质就是求最长上升子序列

#include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>using namespace std;int main(){    int i,n,j,a[201];    cin>>n;    for(i=1;i<=n;i++)    {        scanf("%d",&a[i]);    }    int dp1[201];    int dp2[201];    memset(dp1,0,sizeof(dp1));    memset(dp2,0,sizeof(dp2));    for(i=1;i<=n;i++)    {        int ma=1;        for(j=1;j<i;j++)        {            if(a[j]<a[i])ma=max(ma,dp1[j]+1);        }        dp1[i]=ma;    }    for(i=n;i>=1;i--)    {        int mb=1;        for(j=n;j>i;j--)        {            if(a[j]<a[i])mb=max(mb,dp2[j]+1);        }        dp2[j]=mb;    }    int ans=0;    for(i=1;i<=n;i++)    {        ans=max(dp2[i]+dp1[i]-1,ans);    }    cout<<n-ans<<endl;    return 0;}