直接有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;
}