dfs

「金」点石成金

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

直接有dfs分两条路就可以了,不必用回溯,注意类型为long long
#include<bits/stdc++.h>
using namespace std;
struct stone{
int a,b,c,d;//分别代表增加的财富,消耗的魔法,减少的财富,增加的魔法。
bool Ju=true;
};
long long maxn=0;
int n;
stone s[20];
void dfs(int k,long long money,long long magic){
if(money<0) money=0;
if(magic<0) magic=0;
if(k==n+1){
maxn=max(maxn,moneymagic);
//cout<<money<<" "<<magic<<" "<<money
magic<<endl;
return;
}
dfs(k+1,money+s[k].a,magic-s[k].b);
dfs(k+1,money-s[k].d,magic+s[k].c);
return;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>s[i].a>>s[i].b>>s[i].c>>s[i].d;
s[i].Ju=true;
}
dfs(1,0,0);
cout<<maxn<<endl;
return 0;
}

全部评论
回溯是探索的过程中,一旦发现原来的现在是错误的,就会退回来重新选择。dfs就是逐层访问所有的结点。
点赞 回复 分享
发布于 2020-06-06 17:54
为什么不需要回溯啊,不是每次都是两种选择吗
点赞 回复 分享
发布于 2020-06-06 08:52

相关推荐

门口唉提是地铁杀:之前b站被一个游戏demo深深的吸引了。看up主页发现是个初创公司,而且还在招人,也是一天60。二面的时候要我做一个登录验证和传输文件两个微服务,做完要我推到github仓库,还要我加上jaeger和一堆运维工具做性能测试并且面试的时候投屏演示。我傻乎乎的做完以后人家跟我说一句现在暂时不招人,1分钱没拿到全是白干
你的秋招第一场笔试是哪家
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务