最长不下降子序列
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;
}