牛客算法练习——「金」点石成金(dfs)

「金」点石成金

牛客算法练习——「金」点石成金(dfs)_第1张图片
题意思路:按顺序来进行两种操作:一种是财富+a,魔法-b(若不够减则变成0),另一种是财富-d(若不够减则变成0),魔法+c。
这个题可以用dfs!不是只有告诉方向才能用dfs,有不同的可能选择也可以用dfs。

代码

#include 
using namespace std;
typedef long long ll;
ll a[16],b[16],c[16],d[16];
ll sum=0,n;
void dfs(ll step,ll magic,ll wealth)
{
    if(step==n)
    {
        sum=max(sum,magic*wealth);
        return;
    }
    if(magic>b[step])
 
        dfs(step+1,magic-b[step],wealth+a[step]);
    else
        dfs(step+1,0,wealth+a[step]);
    if(wealth>d[step])
        dfs(step+1,magic+c[step],wealth-d[step]);
    else
        dfs(step+1,magic+c[step],0);
}
int main()
{
    scanf("%lld",&n);
    for(int i=0; i<n; i++)
        scanf("%lld%lld%lld%lld",&a[i],&b[i],&c[i],&d[i]);
    dfs(0,0,0);
    printf("%lld\n",sum);
    return 0;
}

你可能感兴趣的:(dfs,牛客)