1 条题解

  • 0
    @ 2025-4-12 21:54:23

    C :

    #include "stdio.h"
    int main()
    {
    	int a[1000],V[1000],Z[1000];
    	int i,j;
    	int n=0;
    	int M=0,max;
    	char c;
    	while(1)
    	{
    		if(scanf("%d",&a[n])==EOF)
    			break;
    		else
    			n++;
    		do
    		{
    			c=getchar();
    			if(c=='\n')
    				break;
    			else
    				scanf("%d",&a[n]);
    			n++;
    		}while(1);
    		for(i=0;i<n;i++)
    			V[i]=Z[i]=0;
    		for(i=0;i<n;i++)
    		{
    			for(j=i+1;j<n;j++)
    			{
    				if(a[j]<=a[i]&&V[i]==V[j])
    					V[j]++;
    				if(a[j]>a[i]&&Z[i]==Z[j])
    					Z[j]++;
    			}		
    		}
    		max=M=0;
    		for(i=0;i<n;i++)
    		{
    			if(V[i]>max)
    				max=V[i];
    			if(Z[i]>M)
    				M=Z[i];
    		}
    		printf("%d\n%d\n",max+1,M+1);
    		n=0;
    	}
    	return 0;
    }
    

    C++ :

    #include<iostream>
    #include<string>
    #include<sstream>
    #include<algorithm>
    using namespace std;
    //ifstream cin("missile.in");
    //ofstream cout("missile.out");
    const int N(1001);
    int h[N],f[N],g[N];
    int main()
    {
        string s;
        while (getline(cin,s))
        {
            istringstream is(s);
            int n(0);
            while (is>>h[n]) n++;
            fill(f,f+n,1);
            for (int i=0;i<n;i++)
                for (int j=0;j<i;j++)
                    if (h[j]>=h[i]) f[i]=max(f[i],f[j]+1);
            int ans(1);
            for (int i=1;i<n;i++) if (f[i]>ans) ans=f[i];
            cout<<ans<<endl;
            fill(g,g+n,1);
            for (int i=0;i<n;i++)
                for (int j=0;j<i;j++)
                    if (h[j]<h[i])  g[i]=max(g[i],g[j]+1);
            ans=1;
            for (int i=1;i<n;i++) if (g[i]>ans) ans=g[i];
            cout<<ans<<endl;
        }
        return 0;    
    }
    
    

    Pascal :

    program jco33;
     var
      f,g:array[1..10005]of longint;
      i,j,k,l,n,m,ans:longint;
      start:boolean;
     function max(a,b:longint):longint;
     begin
         if a>b then exit(a);
         exit(b);
     end;
     begin
      while not eof do
      begin
      n:=0;ans:=-10;
      fillchar(f,sizeof(f),0);
      for i:=1 to 10000 do g[i]:=1;
      while not eoln do
       begin
        inc(n);
        read(f[n]);
       end;
      for i:=2 to n do
       begin
        for j:=1 to i-1 do
         if f[i]<=f[j] then g[i]:=max(g[i],g[j]+1);
        ans:=max(ans,g[i]);
       end;
      if ans=-10 then halt;
      writeln(ans);
      fillchar(g,sizeof(g),0);
      m:=0;
      for i:=1 to n do
       begin
        start:=false;
        for j:=1 to m do
         if g[j]>=f[i] then
          begin
           g[j]:=f[i];
           start:=true;
           break;
          end;
        if not start then
         begin
          inc(m);
          g[m]:=f[i];
         end;
       end;
      writeln(m); readln;
    
    end;
     end.
    
    
    • 1

    信息

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