您的位置:首页 > 其它

POJ 1836 Alignment

2013-09-05 14:44 274 查看
题目大意:

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






(感谢大神提供图片)

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

下面是代码:

#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: