这题当时做的时候不知道为啥就想到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);
}
我可能是第一个这么写的