HDU 1423 Greatest Common Increasing Subsequence ——动态规划
好久以前的坑了。
最长公共上升子序列。
没什么好说的,自己太菜了
#include <map> #include <cmath> #include <queue> #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; #define F(i,j,k) for (int i=j;i<=k;++i) #define D(i,j,k) for (int i=j;i>=k;--i) #define ll long long #define maxn 505 #define mp make_pair int t,n,m,a[maxn],b[maxn],f[maxn][maxn],ans; int main() { scanf("%d",&t); while (t--) { ans=0; scanf("%d",&n);F(i,1,n)scanf("%d",&a[i]); scanf("%d",&m);F(i,1,m)scanf("%d",&b[i]); memset(f,0,sizeof f); F(i,1,n) { int tmp=0; for (int j=1;j<=m;++j) { f[i][j]=f[i-1][j]; if (b[j]<a[i]) tmp=max(f[i][j],tmp); if (a[i]==b[j]) f[i][j]=max(f[i][j],tmp+1); } } F(i,1,m) ans=max(ans,f[n][i]); printf("%d\n",ans); if (t) printf("\n"); } }