2021.08.13(AcWing每日一题)

2021/8/13 23:07:23

本文主要是介绍2021.08.13(AcWing每日一题),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

1.3802. 消灭数组 - AcWing题库

#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstdio>
#include<cstring>
using namespace std;
#define int long long
int a[100];
int cal(int l,int r){/*返回长度*/
    int mid=(l+r)/2;
    int sum=0;
    for(int i=l;i<=r;i++){
        if(a[i]<a[i-1]&&i-1>=0){
            return 0;
        }
    }
    return r-l+1;
}
int len=0;
void dfs(int l,int r){
    if(l>=r){
        return ;
    }

    if(cal(l,r)){
        len=max(len,cal(l,r));
        return ;
    }
    int mid=(l+r)/2;
    dfs(l,mid);
    dfs(mid+1,r);
}
signed main(){
    int t;
    scanf("%lld",&t);
    while(t--){
        int n;
        len=0;
        scanf("%lld",&n);
        for(int i=0;i<n;i++){
            scanf("%lld",&a[i]);
        }
        int sum=1;
        int s=1;
        dfs(0,n-1);
        printf("%lld\n",max(len,(int)1));
    }
}
View Code

注:就是要分清楚在哪里进行分块,还用到部分的dfs,其实这个数据暂时不用剪枝,主要是数据范围小

 



这篇关于2021.08.13(AcWing每日一题)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程