讨论 / ???拜请大牛指教.....
zrp 2011-10-04 01:29:00
点我顶贴 收藏 删除
26题合唱队列我用动态规划做,为啥总过不了???
#1 zrp@2008-05-03 22:54:00
回复 删除
#include<stdio.h>

main()

{

int a[2000]={0};

int n;

int good=-1;

int i,j,k=0,l;

scanf("%d",&n);

for(i=0;i<n;i++)

scanf("%d",&a[i]);

for(i=0;i<n;i++)

{l=a[i];

k=0;

for(j=i-1;j>=0;j--)

{

if(a[j]<=l)

l=a[j];

else

k++;

}

l=a[i];

for(j=i+1;j<n;j++)

{

if(a[j]<=l)

l=a[j];

else

k++;

}

if(k<good||good==-1)

good=k;

}

printf("%d",good);

}

#2 WIngfly@2008-05-26 05:21:00
回复 删除
program y08m5d26;

var n,i,j,max:longint;a,b,c:array[1..110]of longint;

begin

read(n);

for i:=1 to n do read(a[i]);

for i:=1 to n do

begin

b[i]:=1;

for j:=1 to i-1 do

if (a[i]>a[j])and(b[j]+1>b[i]) then b[i]:=b[j]+1;

end;

for i:=n downto 1 do

begin

c[i]:=1;

for j:=n downto i+1 do

if (a[i]>a[j])and(c[j]+1>c[i]) then c[i]:=c[j]+1;

end;

max:=0;

for i:=1 to n do

if max<b[i]+c[i]

then max:=b[i]+c[i];

write(n-max+1);

end.

#3 zrp@2008-05-27 21:42:00
回复 删除
thank you very much!!!
#4 xiangweilai@2011-01-20 03:23:00
回复 删除
c++?

有c++的吗?

#5 woai9bansc@2011-10-04 01:29:00
回复 删除
我表示只要求出每个点从第一个人到他自己的最大升序,以及从他开始到最后一个人的最大降序相加-1就是最后剩下的人数了,用DP很简单
查看更多回复
提交回复