题意:
有n个点,每个点都有
a
[
i
]
a[i]
a[i]个糖果,从第
i
i
i个点到第
i
+
1
i+1
i+1个点会消耗
b
[
i
]
b[i]
b[i]个糖果,限定在
n
n
n个点中只能选择三个点补给糖果,求点
1
1
1到点
n
n
n最多能剩多少个糖果
思路:
dfs,维护到达n点的时候的s的最大值
AC代码:
#include<bits/stdc++.h>
using namespace std;
const int maxn= 1e3+10;
int n,a[maxn],b[maxn],ans;
void dfs(int now, int s, int cnt){
if(s<0) return;
if(now == n){
if(cnt<3) s += a[now];
ans = max(ans, s);
return ;
}
if(cnt<3) dfs(now+1,s+a[now]-b[now],cnt+1);
dfs(now+1, s-b[now], cnt);
}
int main(){
while(cin>>n){
ans = -1;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=n-1;i++) cin>>b[i];
dfs(1,0,0);
cout<<ans<<endl;
}
}