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

    题意:

    输入一个正整数N(<=200),代表颜色总数,接下来输入一个正整数M(<=200),代表喜爱的颜色数量,接着输入M个正整数表示喜爱颜色的编号(同一颜色不会出现两次),接下来输入一个正整数L(<=10000),代表条带的长度,接着输入L个正整数表示条带上的颜色的编号。输出以喜爱颜色顺序排列的最长子串长度(不必每种颜色都有,只保证相对位置相同,同种颜色可连续)。

    AAAAAccepted code:

     1 #define HAVE_STRUCT_TIMESPEC
     2 #include<bits/stdc++.h>
     3 using namespace std;
     4 int a[10007],pos[207];
     5 int dp[10007];
     6 int main(){
     7     ios::sync_with_stdio(false);
     8     cin.tie(NULL);
     9     cout.tie(NULL);
    10     int n,m;
    11     cin>>n>>m;
    12     int color;
    13     for(int i=1;i<=m;++i){
    14         cin>>color;
    15         pos[color]=i;//记录颜色的相对位置
    16     }
    17     int cnt=0;
    18     int stripe;
    19     int l;
    20     cin>>l;
    21     for(int i=1;i<=l;++i){
    22         cin>>stripe;
    23         if(pos[stripe])
    24             a[++cnt]=pos[stripe],dp[cnt]=1;//记录条带上颜色在喜爱条带上的位置
    25     }
    26     int mx=0;
    27     for(int i=1;i<=cnt;++i){
    28         for(int j=1;j<i;++j)//以相对位置j结尾的都可以在后面加上以相对位置i结尾的颜色
    29             if(a[j]<=a[i])
    30                 dp[i]=max(dp[i],dp[j]+1);//更新以相对位置i结尾的子串的长度
    31         mx=max(mx,dp[i]);//选取最长长度作为答案
    32     }
    33     cout<<mx;
    34     return 0;
    35 }
    保持热爱 不懈努力 不试试看怎么知道会失败呢(划掉) 世上无难事 只要肯放弃(划掉)
  • 相关阅读:
    Thinkphp学习笔记2-
    Thinkphp学习笔记1-URL模式
    WebApi-如何实现接口加密
    微信-.NET调用JS-SDK
    微信-JSSDK .NET版
    HTML-获取/修改html页面标题
    JS-获取图片地址
    微信-js sdk invalid signature签名错误 问题解决
    C++笔试题
    单链表反转的分析及实现
  • 原文地址:https://www.cnblogs.com/ldudxy/p/11605819.html
Copyright © 2011-2022 走看看