合唱队形~~~

来源:百度知道 编辑:UC知道 时间:2024/06/01 04:08:37
麻烦看看我的程序有什么问题~~~~
#include<stdio.h>
main()
{int n,j,i,m=0,max=0,max2=0;
scanf("%d",&n);
int a[n+1],s[n+1],c[n+1];
for(i=1;i<=n;i++)
{scanf("%d",&a[i]);
s[i]=1;c[i]=1;}
for(i=2;i<=n;i++)
{m=0;max=0;
for(j=1;j<=i-1;j++)
{if(a[j]>a[i])m=s[j];
if(m>=max)max=m;
}
s[i]+=max;
}
for(i=2;i<=n;i++)
{m=0;max=0;
for(j=1;j<=i-1;j++)
{if(a[j]<a[i])m=c[j];
if(m>=max)max=m;
}
c[i]+=max;
}
for(i=1;i<=n;i++)
{if(s[i]+c[i]-1>max2)max2=s[i]+c[i]-1;
}
printf("%d",n-max2);
}

动态数组不是你那么做的,
是这么做的:
#include<stdio.h>
#include<stdlib.h>

main()
{
int n,j,i,m=0,max=0,max2=0;
int *a,*s,*c;
scanf("%d",&n);
//int a[n+1],s[n+1],c[n+1];
a=(int *)malloc((n+1)*sizeof(int));
s=(int *)malloc((n+1)*sizeof(int));
c=(int *)malloc((n+1)*sizeof(int));

for(i=1;i<=n;i++)
{scanf("%d",&a[i]);
s[i]=1;c[i]=1;}
for(i=2;i<=n;i++)
{m=0;max=0;
for(j=1;j<=i-1;j++)
{if(a[j]>a[i])m=s[j];
if(m>=max)max=m;
}
s[i]+=max;
}
for(i=2;i<=n;i++)
{m=0;max=0;
for(j=1;j<=i-1;j++)
{if(a[j]<a[i])m=c[j];
if(m>=max)max=m;
}
c[i]+=max;
}
for(i=1;i<=n;i++)
{if(s[i]+c[i]-1>max2)max2=s[i]+c[i]-1;
}
printf("%d",n-max2);

delete a;
delete s;
delete c;
}