牛牛的数列

https://ac.nowcoder.com/acm/problem/13134

动态规划

概述:

给出数组,求出最长的递增序列(可以是删除其中一个数字的序列),输出递增序列的长度

#include<cstdio>
int main(){
    int b,c,d,e,m,n,i;
    scanf("%d",&n);
    int a[n];
    for(i=0;i<n;i++){
        scanf("%d",&a[i]);
    }
    m=1;
    for(i=0;i<n-1;i++){
        d=c=1;
        for(b=i;b<n-1;b++){
            if(a[b+1]>a[b]){
                c++;
                if(b==n-2){//就已经是结束了,因为m=c设置在循环内部,如果不这样,最长序列达到末尾的情况无法考虑在内
                     if(c>m)
                         m=c;
                }
            }else if(d==1){
                c++;
                d=0;
                if(!((a[b-1]<a[b]&&a[b]<a[b+2])||(a[b-1]<a[b+1]&&a[b+1]<a[b+2]))){
          //注意,这里是指,删除这个数字后,即跳过这个数字进行大小比较
if(c>m){ m=c; } break; } }else { if(c>m){ m=c; } break; } } } printf("%d",m); }

 

posted @ 2022-10-16 10:43  killjoyskr  阅读(18)  评论(0)    收藏  举报