POJ 1836 Alignment

来源:互联网 发布:宏业软件怎么安装 编辑:程序博客网 时间:2024/06/04 18:31

题目大意:

给定一排人的身高,求踢出最少的人可以使队列身高如下形状:


(感谢大神提供图片)

这个题比较简单,顺序一遍最长上升子序列,逆序一遍最长上升子序列,最后处理一下数据就行。

下面是代码:

#include <stdio.h>#include <string.h>const int MAX=1005;int main(){    int n,dpl[MAX],dpr[MAX];    double hi[MAX];    while(scanf("%d",&n)!=EOF)    {        int i,j;        for(i=0; i<n; i++)        {            scanf("%lf",&hi[i]);        }        memset(dpr,0,sizeof(dpr));        memset(dpl,0,sizeof(dpl));        dpl[0]=1;        for(i=1;i<n;i++)        {            dpl[i]=1;            for(j=i-1;j>=0;j--)            {               if(hi[j]<hi[i]&&dpl[j]+1>dpl[i])               {                   dpl[i]=dpl[j]+1;               }            }        }        dpr[n-1]=1;        for(i=n-2;i>=0;i--)        {            dpr[i]=1;            for(j=i+1;j<=n-1;j++)            {               if(hi[j]<hi[i]&&dpr[j]+1>dpr[i])               {                   dpr[i]=dpr[j]+1;               }            }        }        int ans=dpl[n-1];        for(i=0;i<n-1;i++)        {            for(j=i+1;j<n;j++)            {                if(dpl[i]+dpr[j]>ans)                {                    ans=dpl[i]+dpr[j];                }            }        }        printf("%d\n",n-ans);    }    return 0;}


原创粉丝点击