#1 zrp@2008-05-03 22:54:00
1439
回复
删除
#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
1687
回复
删除
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.
#5 woai9bansc@2011-10-04 01:29:00
22766
回复
删除
我表示只要求出每个点从第一个人到他自己的最大升序,以及从他开始到最后一个人的最大降序相加-1就是最后剩下的人数了,用DP很简单