hdu1423 最长公共上升子序列
题目传送门
Greatest Common Increasing Subsequence
Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 10279    Accepted Submission(s): 3311
Problem Description
This is a problem from ZOJ 2432.To make it easyer,you just need output the length of the subsequence.
Input
Each sequence is described with M - its length (1 <= M <= 500) and M integer numbers Ai (-2^31 <= Ai < 2^31) - the sequence itself. 
Output
output print L - the length of the greatest common increasing subsequence of both sequences. 
Sample Input
1
5
1 4 2 5 -12
4
-12 1 2 4
Sample Output
2
Source
Recommend
题意:求两个序列的最长公共上升子序列
题解:定义dp[j]表示a序列中从1到n与b序列中从1到j并以b[j]为结尾的最长公共上升子序列的长度。
状态转移方程:dp[j] = dp[k] + 1, if(a[i] = = b[j]), 1 <= k < j.
状态转移方程:dp[j] = dp[k] + 1, if(a[i] = = b[j]), 1 <= k < j.
代码:
#include<iostream>
#include<string.h>
#include<algorithm>
#include<stdio.h>
#include<queue>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef long long ll;
typedef pair<int,int> PII;
#define mod 1000000007
#define pb push_back
#define mp make_pair
#define all(x) (x).begin(),(x).end()
#define fi first
#define se second
//head
#define MAX 505
int T;
int n,m;
int a[MAX],b[MAX];
int dp[MAX];
void LCIS()
{
    memset(dp,0,sizeof(dp));
    for(int i=1;i<=n;i++)
    {
       int pos=1;
        for(int j=1;j<=m;j++){
            if(a[i]>b[j]&&dp[j]+1>dp[pos]) pos=j;
            if(a[i]==b[j]) dp[j]=dp[pos]+1;
        }
    }
}
void solve()
{
    LCIS();
    int maxn=0;
    for(int i=1;i<=m;i++)
    {
        maxn=max(maxn,dp[i]);
    }
    printf("%d\n",maxn);
}
int main()
{
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d",&n);
        for(int i=1;i<=n;i++){
            scanf("%d",&a[i]);
        }
        scanf("%d",&m);
        for(int i=1;i<=m;i++)
            scanf("%d",&b[i]);
        solve();
    }
    return 0;
}
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号