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
  • 相关阅读:
    linux两数相除计算百分数
    安装lombok
    STS(spring tool suite)修改默认编码
    eclipse项目中的java文件导入后变为空心J问题
    说Gradle
    window下安装git与git使用
    windows下安装git
    Javaweb 实现分页功能
    Xshell连接不上Ubuntu解决方式
    ubuntu下中文乱码解决
  • 原文地址:https://www.cnblogs.com/ctyakwf/p/12033292.html
Copyright © 2011-2022 走看看