1 solutions
-
0
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