想问一下这道题这样写算DFS么?感觉我的思路好像不太对
查看原帖
想问一下这道题这样写算DFS么?感觉我的思路好像不太对
568243
Windows_Update楼主2022/6/11 15:59

这题当时做的时候不知道为啥就想到DFS上去了,于是就出来了这样一坨代码
竟然过了,但是这算是DFS吗?

#include<bits/stdc++.h>
using namespace std;
inline void read(long long &x){
    x=0;
    char ch=getchar_unlocked();
    while(ch<'0'||ch>'9')
        ch=getchar_unlocked();
    while(ch>='0'&&ch<='9'){
        x=(x<<1)+(x<<3)+(ch^48);
        ch=getchar_unlocked();
    }
    return;
}
void print(long long x){
    if(x>9)print(x/10);
    putchar_unlocked(x%10+48);
}
#define Min(a,b) a<b?a:b
#define Max(a,b) a<b?b:a
long long n,a[1000005],minans(0x3f3f3f3f3f3f3f);
long long di[2]={1,-1};
bitset<1000005> vis;
void dfs(long long i,long long cnt,long long ans){
    if(ans>minans)return;
    if(cnt==n-1){
        minans=Min(minans,ans);
        return;
    }
    for(long long j=0;j<2;++j){
        if(i+di[j]>=1&&i+di[j]<=n){
            vis[i]=1;
            ans+=Max(a[i],a[i+1]);
            if(!vis[i+di[j]])dfs(i+di[j],++cnt,ans);
        }
    }
}
signed main(){
    read(n);
    for(long long i=1;i<=n;++i)read(a[i]);
    dfs(1,0,0);
    print(minans);
}

我可能是第一个这么写的

2022/6/11 15:59
加载中...