对于每组数据,输出真实事件序列的最长可能长度。
题意:最长公共递增子序列。
思路:学思路看代码吧;
AC代码:(懂了题解后直接打了一遍,没编译直接交,就过了)
#include<cstdio> #include<iostream> #include<cstdlib> #include<cstring> #include<algorithm> #include<cmath> #include<queue> #include<vector> #include<map> #include<string> #define LL long long #define eps 1e-8 using namespace std; const int mod = 1e7+7; const int INF = 1e8; const int inf = 0x3f3f3f3f; const int maxx = 10100; const int N = 1010; int n,m; int a[N],b[N],dp[N]; int main() { int t; scanf("%d",&t); while(t--) { memset(dp,0,sizeof(dp)); scanf("%d",&n); for(int i=0;i<n;i++) scanf("%d",&a[i]); scanf("%d",&m); for(int i=0;i<m;i++) scanf("%d",&b[i]); for(int i=0;i<n;i++) { int num=0; for(int j=0;j<m;j++) { if(a[i]>b[j]&&num<dp[j]) num=dp[j]; if(a[i]==b[j]) dp[j]=num+1; } } int ans=0; for(int i=0;i<m;i++) ans=max(ans,dp[i]); printf("%d\n",ans); } }
