2529: Chorus (lis双向)

来源:互联网 发布:流媒体地址探测软件 编辑:程序博客网 时间:2024/06/02 07:49

 

#include <iostream>
#include <stdio.h>
using namespace std;
const int maxn=103;
int main () //lis lcs 用OPT1存上升序列的,OPT2存下降序列的,则第I个人的最大不出列人数为OPT1[I]+OPT[I] -1
{
 int M,opt1[maxn],opt2[maxn];
 while ( cin>> M)
 {
  int c[maxn],i,j,ans=0;
  for ( i=0 ; i<M ; i++)
   {
    cin>>c[i];
    opt1[i]=1;//维护每个元素左面包含自己的最大增序列元素个数,初始化是必要的

    opt2[i]=1;//
   }
  for( i=1 ; i<M ; i++)
  {
    for( j=0 ; j<i ; j++)
     if(c[i]>c[j] && opt1[j]+1>opt1[i])
      opt1[i]=opt1[j]+1;
  }
  for( i=M-2 ; i>=0 ; i--)
  {
    for( j=M-1 ; j>i ; j--)
     if(c[i]>c[j] && opt2[j]+1>opt2[i])
      opt2[i]=opt2[j]+1;
  }
  for(i=0;i<M;i++)
   if(opt1[i]+opt2[i]-1>ans)ans=opt1[i]+opt2[i]-1;
  cout<<M-ans<<"/n";
 }
 return 0;
}

原创粉丝点击