题意思路:按顺序来进行两种操作:一种是财富+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;
}