最长不下降子序列

POJ上的alig nment就是最长不下降子序列的两次运用。从后往前,从前往后,问题解决。好思路,可惜不是我想的。~~~

#include <iostream>
#include <cstring>
#define N 1010
using namespace std;
double b[N];
int c[N],d[N];
int main ()
{
int a,max=0,i,j;
cin>>a;
for (i=1;i<=a;i++)
cin>>b[i];
memset(c,0,sizeof (c));
memset (d,0,sizeof (d));
c[1]=1;
for (i=2;i<=a;i++)
{
c[i]=1;
for (j=1;j<i;j++)
if (b[j]<b[i] && c[i]<=c[j])
c[i]=c[j]+1;
}

d[a]=1;
for (i=a-1;i>=1;i--)
{
d[i]=1;
for (j=a;j>i;j--)
if (b[j]<b[i] && d[i]<=d[j])
d[i]=d[j]+1;
}

for (i=1;i<a;i++)
for (j=i+1;j<=a;j++)
if (max<d[j]+c[i])
max=d[j]+c[i];
cout<<a-max<<endl;
return 0;
}

posted @ 2013-11-07 20:19  单调的幸福  阅读(276)  评论(0编辑  收藏  举报