以下是我的代碼:
#include<stdio.h>
int max(int a,int b)


{
return a>b?a:b;
}
int main()


{

int a[102],len_1[101]/**//*下降序列*/,len_2[101]/**//*上升序列*/,tot[101],n,i,j,ans;
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
for(i=1;i<=n;i++)

{
len_1[i]=1;
len_2[i]=1;
}
for(i=n;i>=1;i--)
for(j=i+1;j<=n;j++)
if(a[i]>a[j])//以 i 為頭最長下降序列
len_1[i]=max(len_1[j]+1,len_1[i]);
for(i=1;i<=n;i++)
for(j=i+1;j<=n;j++)
if(a[i]<a[j])//以 i 為尾最長上升序列
len_2[j]=max(len_2[i]+1,len_2[j]);

/**//*
for(i=1;i<=n;i++)
printf("%d ",len_1[i]);
putchar('\n');
for(i=1;i<=n;i++)
printf("%d ",len_2[i]);
putchar('\n');
//*/
for(i=1;i<=n;i++)
tot[i]=len_1[i]+len_2[i];
ans=0;
for(i=1;i<=n;i++)
ans=max(ans,tot[i]);
printf("%d\n",n-ans+1);
return 0;
}

posted on 2010-01-06 19:13
lee1r 閱讀(569)
評論(0) 編輯 收藏 引用 所屬分類:
題目分類:動態(tài)規(guī)劃