首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

PAT甲级-1045 Favorite Color Stripe (30分)

  • 24-03-03 00:43
  • 3903
  • 7669
blog.csdn.net

点击链接PAT甲级-AC全解汇总

题目:
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}.

Input Specification:
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 (≤10​4​​ ) which is the length of the given stripe, followed by L colors on the stripe. All the numbers in a line a separated by a space.

Output Specification:
For each test case, simply print in a line the maximum length of Eva’s favorite stripe.

Sample Input:

6
5 2 3 1 5 6
12 2 2 4 1 5 5 6 3 1 1 5 6
  • 1
  • 2
  • 3

Sample Output:

7
  • 1

题意:
按照给定顺序,从一串数种找出与该顺序相符合的子序列最大长度。

没有学过算法,这种题刚上来有点蒙,看了各路大神的dp思路,还是觉得柳神写得最清楚。借鉴了一下思路。学海无涯。

思路:
先把数串过滤不在排名中的数字,剩下的最次长度也是1;
从前往后对于对于每个数而言,到此为止的最大长度(是以该节点为终点,不然没法考虑到排名为51111的情况),分两种情况

  • 如果前面没有比自己排名低的,那么以此为end最大长度就是1;
  • 如果前面有比自己排名低的,那么以此为end最大长度就是之前最大比自己排名低的那个数作为end的长度+1

我的代码:

#include
using namespace std;

int main(){
    int N,M,L;
    cin>>N>>M;
    int rank[N+1]={0};
    for(int i=1;i<=M;i++)
    {
        int num;
        cin>>num;
        rank[num]=i;//rank[2]=1 数字2的排名是1
    }
    cin>>L;
    vector<int>nums;
    for(int i=0;i<L;i++)
    {
        int num;
        cin>>num;
        if(rank[num])nums.push_back(num);//没有排名的数就不考虑了
    }

    int max_i[nums.size()]={0},max_res=0;
    for(int i=0;i<nums.size();i++)
    {
        max_i[i]=1;
        for(int j=0;j<i;j++)//向前找最大的
            if(rank[nums[j]]<=rank[nums[i]])
                max_i[i]=max(max_i[i],max_i[j]+1);
        max_res=max(max_i[i],max_res);
    }
    cout<<max_res<<endl;
    return 0;
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
注:本文转载自blog.csdn.net的邂逅模拟卷的文章"https://blog.csdn.net/qq_34451909/article/details/105553804"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top