1 solutions

  • 0
    @ 2024-12-11 0:49:31

    C :

    #include "stdio.h"
    #include "string.h"
    int n,m,s,M;
    int a[500],b[500],f[501][501];
    int max(int a,int b)
    {
    	if(a>b)
    		return a;
    	return b;
    }
    int main()
    {
    	int T;
    	int i,j;
    	scanf("%d",&T);
    	while(T--)
    	{
    		scanf("%d",&n);
    		for(i=0;i<n;i++)
    			scanf("%d",&a[i]);
    		scanf("%d",&m);
    		for(i=0;i<m;i++)
    			scanf("%d",&b[i]);
    		memset(f,0,sizeof(f));
    		for(i=1;i<=n;i++)
    		{
    			s=0;
    			for(j=1;j<=m;j++)
    			{
    				f[i][j]=f[i-1][j];
    				if(a[i-1]==b[j-1])
    					f[i][j]=s+1;
    				else if(a[i-1]>b[j-1]&&s<f[i-1][j])
    					s=f[i-1][j];
    			}
    		}
    		s=0;
    		for(i=1;i<=m;i++)
    		{
    			if(s<f[n][i])
    				s=f[n][i];
    		}
    		printf("%d\n",s);
    	}
    	return 0;
    }
    

    C++ :

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    using namespace std;
    int n1,n2,T;
    int a[505],b[505],f[505],temp;
    int ans;
    int main(){
    	cin>>T;
    	while (T--){
    		scanf("%d",&n1);
    		memset(a,0,sizeof(a));
    		memset(b,0,sizeof(b));
    		for (int i=1;i<=n1;i++)
    			scanf("%d",&a[i]);
    		scanf("%d",&n2);
    		for (int i=1;i<=n2;i++)
    			scanf("%d",&b[i]);
    		memset(f,0,sizeof(f));
    		ans=0;
    		for (int i=1;i<=n1;i++){
    			temp=0;
    			for (int j=1;j<=n2;j++){
    				if (a[i]>b[j]) temp=max(temp,f[j]);
    				else 
    					if (a[i]==b[j])
    						f[j]=max(f[j],temp+1);
    				ans=max(ans,f[j]);
    			}
    		}
    		printf("%d\n",ans);
    	}
    	return 0;
    }
    
    

    Pascal :

    var
      a,b,f:array[0..505] of longint;
      t,n,m:longint;
    function max(x,y:longint):longint;
    begin
       if x<=y then exit(y);
       exit(x);
    end;
    
    
    procedure init;
    var i,j:longint;
    begin
       fillchar(a,sizeof(a),0);
       fillchar(b,sizeof(b),0);
       fillchar(f,sizeof(f),0);
        read(n);
      for i:=1 to n do read(a[i]);
      read(m);
       for i:=1 to m do read(b[i]);
    end;
    
    procedure main;
    var i,j,temp,ans:longint;
    begin
       ans:=0;
       for i:=1 to n do
        begin
    	   temp:=0;
    	   for j:=1 to m do
    	   begin
    	     if a[i]=b[j] then f[j]:=max(f[j],temp+1);
    		 if a[i]>b[j] then temp:=max(f[j],temp);
    		 ans:=max(ans,f[j]);
    	   end;
    	end;
    	writeln(ans);
    end;
    
    begin
      readln(t);
      while t>0 do
        begin
    	   init;
    	   main;
    	   dec(t);
    	end;
    end.
    
    
    • 1

    Information

    ID
    758
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    (None)
    Tags
    # Submissions
    0
    Accepted
    0
    Uploaded By