1 条题解

  • 0
    @ 2025-4-7 21:19:28

    C :

    #include <stdio.h>
    
    #define Max 100
    
    int main ()
    {
    	int n,nu[Max],dpu[Max],dpd[Max];
    	while(scanf("%d",&n)!=EOF&&n)
    	{
    		for(int i=0;i<n;i++)
    		{
    			scanf("%d",&nu[i]);
    			dpu[i]=dpd[i]=1;
    		}
    		for(int i=1;i<n;i++)
    			for(int j=0;j<i;j++)
    				if(nu[i]>nu[j]&&dpu[i]<dpu[j]+1)
    					dpu[i]=dpu[j]+1;
    		for(int i=n-2;i>-1;i--)
    			for(int j=n-1;j>i;j--)
    				if(nu[i]>nu[j]&&dpd[i]<dpd[j]+1)
    					dpd[i]=dpd[j]+1;
    		int max=0;
    		for(int i=0;i<n;i++)
    			if(max<dpu[i]+dpd[i])
    				max=dpu[i]+dpd[i];
    		printf("%d\n",n-(max-1));
    	}
    }
    

    C++ :

    #include <stdio.h>
    int n;
    int run()
    {
    	int i,j,a[111],u[111],d[111];
    	for(i=1;i<=n;i++)
    		scanf("%d",&a[i]);
    	for(i=1;i<=n;i++)
    		u[i]=1;
    	for(i=1;i<=n;i++)
    		d[i]=1;
    	for(i=1;i<=n;i++)
    		for(j=i+1;j<=n;j++)
    		{
    			if(a[i]<a[j])
    				if(u[j]<u[i]+1)
    					u[j]=u[i]+1;
    			if(a[i]>a[j])
    			{
    				if(d[j]<u[i]+1)
    					d[j]=u[i]+1;
    				if(d[j]<d[i]+1)
    					d[j]=d[i]+1;
    			}
    		}
    	j=0;
    	for(i=1;i<=n;i++)
    		if(u[i]>j)
    			j=u[i];
    	for(i=1;i<=n;i++)
    		if(d[i]>j)
    			j=d[i];
    	printf("%d\n",n-j);
    }
    int main()
    {
    	scanf("%d",&n);
    	while(n!=0)
    	{
    		run();
    		n=0;
    		scanf("%d",&n);
    	}
    	return 0;
    }
    

    Pascal :

    var a:array[0..120]of longint;
        b:array[1..120]of longint;
        i,j,n,ma,z,ma2,ma3,ma4:longint;
    begin
     readln(n);
     while n<>0 do
      begin
       for i:=1 to n do read(b[i]);
       ma4:=0;
       for i:=1 to n do
        begin
         a[i]:=0;ma2:=0;ma3:=0;
         if i>1 then
          for j:=i-1 downto 1 do
           begin
            ma:=-666;
            for z:=j+1 to i do
             if (b[j]<b[z])and(a[z]>ma) then
              ma:=a[z];
            a[j]:=ma+1;
            if a[j]>ma2 then ma2:=a[j];
           end;
         if i<n then
         for j:=i+1 to n do
          begin
           ma:=-666;
           for z:=j-1 downto i do
            if (b[j]<b[z])and(a[z]>ma) then
             ma:=a[z];
           a[j]:=ma+1;
           if a[j]>ma3 then ma3:=a[j];
          end;
         if ma2+ma3+1>ma4 then ma4:=ma2+ma3+1;
        end;
       writeln(n-ma4);
       readln(n);
      end;
    end.
    
    • 1

    信息

    ID
    1112
    时间
    1000ms
    内存
    32MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者