• 序列的美观度(dp连续的长度)


    链接:https://ac.nowcoder.com/acm/contest/9983/I
    来源:牛客网

    设一个长度为m的序列S的美观度等于有多少个整数i满足1≤i≤m−1Si=Si+1,其中Si代表序列Si的第i个元素。
    给出一个长度为n的序列a,问在他的所有子序列美观度最大是多少。
    某个序列的子序列是从最初序列通过去除某些元素(也可以不去除,即序列本身也是子序列)但不破坏余下元素的相对位置(在前或在后)而形成的新序列。

    输入描述:

    输出描述:

    输出一个整数代表答案。
    示例1

    输入

    复制
    5
    1 1 2 3 2

    输出

    复制
    2

    说明

    美观度最大的子序列为[1,1,2,2]
    示例2

    输入

    复制
    7
    1 1 2 2 2 1 1

    输出

    复制
    4

    样例二:序列是1 1 2 2 2 1 1


    dp[i]为前i个数删掉部分数后能达到的最大美观度
    这样只需要记录一下上一次出现a[i]这个数的位置即可
    if(vis[a[i]]==0){
         dp[i]=dp[i-1];
    }
    else{
         dp[i]=max(dp[i-1],dp[vis[a[i]]]+1);
    }
    #include<iostream>
    #include<algorithm>
    #include<cstring> 
    using namespace std;
    const int maxn=1e6+100;
    int vis[maxn];
    int a[maxn];
    int dp[maxn];
    int main(){
        int n;
        cin>>n;
        for(int i=1;i<=n;i++){
            cin>>a[i];
        } 
        dp[1]=0;
        vis[a[1]]=1;
        for(int i=2;i<=n;i++){
            if(vis[a[i]]==0){
                dp[i]=dp[i-1];
            }
            else{
                dp[i]=max(dp[i-1],dp[vis[a[i]]]+1);
            }
            vis[a[i]]=i;
        }
        int ans=0;
        for(int i=1;i<=n;i++){
            ans=max(ans,dp[i]);
        }
        cout<<ans<<endl;
    }


  • 相关阅读:
    关于viewports 设备像素比 密度
    脚本检测 media query 分界点
    chrome Web开放 字体格式不能显示问题
    响应式图片
    ECMAScript 6 proxies
    大小不固定 文字图片居中
    prototype
    基于综合服务平台浅谈Sass应用
    Sass浅谈
    JQ怎么获取margin-left的值
  • 原文地址:https://www.cnblogs.com/lipu123/p/14382400.html
Copyright © 2020-2023  润新知