zoukankan      html  css  js  c++  java
  • PAT 甲级 1045 Favorite Color Stripe(DP)

    题目链接 Favorite Color Stripe

    题意:给定$A$序列和$B$序列,你需要在$B$序列中找出任意一个最长的子序列,使得这个子序列也是$A$的子序列

    (这个子序列的相邻元素可以重复)

    只要求出这个子序列长度的最大值即可

    很基础的DP题,设$f[i]$为当前以$a[i]$结尾的子序列的长度的最大值,扫描$B$序列的每个元素时实时更新即可。

    #include <bits/stdc++.h>
    
    using namespace std;
    
    #define rep(i, a, b)	for (int i(a); i <= (b); ++i)
    #define dec(i, a, b)	for (int i(a); i >= (b); --i)
    
    typedef long long LL;
    
    const int L = 10010;
    const int N = 210;
    
    int a[L], c[N], f[N];
    vector <int> v[N];
    int n, m, l;
    int ans;
    
    int main(){
    
    
    	scanf("%d%d", &n, &m);
    	rep(i, 1, m){
    		scanf("%d", c + i);
    		v[c[i]].push_back(i);
    	}
    
    	scanf("%d", &l);
    	rep(i, 1, l) scanf("%d", a + i);
    
    	rep(i, 1, l){
    		for (auto u : v[a[i]]){
    			if (f[u]) ++f[u];
    			rep(j, 0, u - 1) f[u] = max(f[u], f[j] + 1);
    
    		}
    	}
    
    	rep(i, 1, m) ans = max(ans, f[i]);
    	return 0 * printf("%d
    ", ans);
    }
    
  • 相关阅读:
    软件工程5
    软件工程3
    软件工程4
    软件工程2
    2020软件工程作业01
    2020软件工程个人作业06——软件工程实践总结作业
    个人作业——04
    清风不知道——冲刺日志(第一天)
    清风不知道——凡是预则立
    2020软件工程作业05
  • 原文地址:https://www.cnblogs.com/cxhscst2/p/7197822.html
Copyright © 2011-2022 走看看