您的位置:首页 > 其它

poj解题报告——1836

2015-02-10 16:00 316 查看
这题要求最长上升子序列和最长下降子序列,除了最高的部分能出现等高,其他部分不行。

代码如下

#include<stdio.h>
#include<stdlib.h>
void main()
{
int n,i,j,result,m,up[1005],down[1005];
double a[1005];
while(scanf("%d",&n)!=EOF)
{
for(i=0;i<n;i++)
{
scanf("%lf",&a[i]);
}
m=0;
memset(up,0,sizeof(up));
memset(down,0,sizeof(down));
up[0]=1;
for(i=1;i<n;i++)
{
up[i]=1;
for(j=0;j<i;j++)
{
if(up[j]>=up[i]&&a[i]>a[j])
up[i]=up[j]+1;
}
}
down[n-1]=1;
for(i=n-2;i>=0;i--)
{
down[i]=1;
for(j=n-1;j>i;j--)
{
if(down[j]>=down[i]&&a[i]>a[j])
down[i]=down[j]+1;
}
}
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(up[i]+down[j]>m)
m=up[i]+down[j];
}
}
result=m;
printf("%d\n",n-result);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: