1045 Favorite Color Stripe (30 分)

题意:给定一个序列A,给定一个序列B,在A中找到满足序列B的最长不下降子序列
思路:维护一个B的顺序表,以O(1)得到颜色之间的大小关系,LIS模板

#include<iostream>
#include<vector>

using namespace std;

const int N = 210, M = 10010;

int order[N];
int f[M], s[M];


int n, m, l;

int main(){
    cin >> n >> m;
    
    for(int i = 1; i <= m; i ++){
        int c;
        cin >> c;
        order[c] = i;
    }
    
    cin >> l;
    
    for(int i = 0; i < l; i ++) cin >> s[i];
    
    for(int i = 0; i < l; i ++){
        int mx = 0;
        
        for(int j = 0; j < i; j ++)
            if(order[s[j]] <= order[s[i]]) 
                mx = max(mx, f[j]);
                
        if(order[s[i]]) f[i] = mx + 1;
    }
    
    cout << f[l - 1] << endl;
    
    return 0;
}
posted @ 2021-07-02 11:19  yys_c  阅读(50)  评论(0编辑  收藏  举报