zoukankan      html  css  js  c++  java
  • CF1272D Remove One Element题解

       本题求取最长连续子串,最多可以删除一位。

       这题是典型的dp状态机模型,我们需要两维数组,第二维表示是否之前已经删除过一位。整体f[i][0],f[i][1]表示以第i个数字结尾的最大值

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<functional>
    #include<string>
    #include<algorithm>
    #include<iostream>
    #include<set>
    #include<vector>
    #include<queue>
    #include<cstdlib>
    using namespace std;
    const int N=2e5+10;
    int f[N][2]; //第二维表示有没有已经间隔了1 
    int a[N];
    int main(){
        int i;
        int n;
        cin>>n;
        for(i=1;i<=n;i++)
        cin>>a[i];
        f[1][0]=1;
        for(i=2;i<=n;i++){
            f[i][0]=1; //初始状态为1 
            if(a[i]>a[i-1]){
            f[i][0]=f[i-1][0]+1;//当它的前面一个元素大的时候,可以取i-1位置没有间隔过的+1 
            f[i][1]=f[i-1][1]+1;//表示 可以去i-1位置已经间隔过的+1和他本身哪个大 
            }
            if(a[i]>a[i-2])
            f[i][1]=max(f[i-2][0]+1,f[i][1]);//当他大于i-2,可以用i-2位置没有间隔过的+1或者他本身 
        }
        int res=0;
        for(i=1;i<=n;i++)
        res=max(res,max(f[i][0],f[i][1]));
        cout<<res<<endl;
    }
    View Code
  • 相关阅读:
    Django(二)
    Django(一)
    MYSQL理论知识汇总
    默认参数
    深浅拷贝和赋值关系
    bootstrap常用知识
    jQuery常用功能代码
    java集合框架知识总结
    Mysql数据库SQL语句整理
    基于IO流的模拟下载文件的操作
  • 原文地址:https://www.cnblogs.com/ctyakwf/p/12033292.html
Copyright © 2011-2022 走看看