心如止水
Je n'ai pas le temps
posts - 400,comments - 130,trackbacks - 0
以下是我的代码:

#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 阅读(560) 评论(0)  编辑 收藏 引用 所属分类: 题目分类:动态规划

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理