【PAT甲级真题】- Favorite Color Stripe (30)

题目来源

Favorite Color Stripe (30)

注意点

  • 颜色序列不用每个都出现,只要按顺序即可

题目描述

Eva is trying to make her own color stripe out of a given one. She would like to keep only her favorite colors in her favorite order by cutting off those unwanted pieces and sewing the remaining parts together to form her favorite color stripe.

It is said that a normal human eye can distinguish about less than 200 different colors, so Eva's favorite colors are limited. However the original stripe could be very long, and Eva would like to have the remaining favorite stripe with the maximum length. So she needs your help to find her the best result.

Note that the solution might not be unique, but you only have to tell her the maximum length. For example, given a stripe of colors {2 2 4 1 5 5 6 3 1 1 5 6}. If Eva's favorite colors are given in her favorite order as {2 3 1 5 6}, then she has 4 possible best solutions {2 2 1 1 1 5 6}, {2 2 1 5 5 5 6}, {2 2 1 5 5 6 6}, and {2 2 3 1 1 5 6}.

输入描述:

Each input file contains one test case. For each case, the first line contains a positive integer N (<=200) which is the total number of colors involved (and hence the colors are numbered from 1 to N). Then the next line starts with a positive integer M (<=200) followed by M Eva's favorite color numbers given in her favorite order. Finally the third line starts with a positive integer L (<=10000) which is the length of the given stripe, followed by L colors on the stripe. All the numbers in a line are separated by a space.

输出描述:

For each test case, simply print in a line the maximum length of Eva's favorite stripe.

输入例子:

复制代码
6
5 2 3 1 5 6
12 2 2 4 1 5 5 6 3 1 1 5 6

输出例子:

复制代码
7

思路简介

其实就是一道最长不降序列

把颜色的色号映射为输入的顺序

然后问题即转化为第二行的最长不降序列

注意题目当中的要求的颜色序列不用每个颜色都出现,只要按照顺序出现即可,可以跳过某个颜色

遇到的问题

  1. 以为所有颜色必须出现

代码

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;

void solve(){
    int n;cin>>n;
    int m;cin>>m;
    vector<int>fav_index(n+1,0);// 颜色 -> 排名,不在喜欢列表中的颜色排名为0
    for(int i=1;i<=m;++i){
        int fav;
        cin>>fav;
        fav_index[fav]=i;
    }

    int l;cin>>l;
    vector<int>stripe;
    for(int i=0;i<l;++i){
        int color;
        cin>>color;
        if(!fav_index[color])continue;
        stripe.emplace_back(fav_index[color]);
    }


    int len=stripe.size();
    vector<int> dp(len,1);//dp(i)以i结尾的最长不降序列
    int ans=1;
    for(int i=0;i<len;++i){
        for(int j=0;j<i;++j){
            if(stripe[i]>=stripe[j]){
                dp[i]=max(dp[i],dp[j]+1);
            }
        }   
        ans=max(ans,dp[i]);
    }
    cout<<ans<<'\n';
}

int main() {
    ios::sync_with_stdio(false);cin.tie(nullptr);
    //fstream in("in.txt",ios::in);cin.rdbuf(in.rdbuf());

    int T=1;
    //cin>>T;
    while(T--){
        solve();
    }
    return 0;
}
相关推荐
程序员老陆2 分钟前
std::experimental::when_any 深度解析:等待“第一个完成”的异步组合原语
c++·多线程
β添砖java17 分钟前
机器学习2 KNN算法、距离度量、特征预处理、超参数选择、手写数字、鸢尾花
人工智能·算法·机器学习
TAN-90°-23 分钟前
Deep Learning for Computer Vision——Generative Models 2
人工智能·深度学习·神经网络·算法·目标检测·机器学习·计算机视觉
Rabitebla31 分钟前
【Linux系统编程】指令(三):创建、删除、复制、移动、看内容
linux·数据结构·c++·算法
程序员老陆37 分钟前
CMake 常用关键字与命令全景:从 set到 target_link_options的现代工程视角
c++·cmake·程序开发
qq_410194291 小时前
.NET 8.0 下基于 PaddleOCRSharp 的离线文字识别落地指南
算法·.net
Omics Pro1 小时前
1个月2轮融资!长寿虚拟细胞
数据库·人工智能·算法·机器学习·自然语言处理
residual_fan1 小时前
航空发动机故障诊断专用智能体(六):实际机队健康管理中的应用考量与展望
人工智能·算法·数据挖掘·数据分析
码匠许师傅1 小时前
【C++三方组件】cxxopts:轻量首选的命令行解析
c++
hansang_IR2 小时前
【讲解】CSP-S2026 第一轮初赛
c++·算法