「ゴールド」マイダスタッチDFS

マジックと富値初期値0:ゲームを要求されたら

タイトル説明

Paの秋李は金属製の魔法を習得しました

彼女は石のいくつかをピックアップすることを決定し、キャストの魔法マイダスタッチ

PA秋のLi N行の石を拾うために、石の一部が金に決定ポイント

私の石のために、金にそれならば、富は、双方向消費魔法aiを増加します(ちなみに、たとえない魔法の値を、マジック値がゼロの動作を操作することができます)

それ以外の場合は、Paの秋李CIマジックは(富値同様に、あなたが無制限減らすことができます)を返しますが、ディ富を減らすために

Paの秋李は1-nは、すべての石は、決定がなされているか、あなたが最大の収入のあなた自身の最終的な値を作ることができるの順に動作させるために、知っていただきたいと思います

出力のみに最大の利益を必要とします

戻り値=富値*マナ

(ヒント:値であることを、負になっていない値が0未満であれば、いつでも、それはすぐに0になります)

説明を入力します。

最初の整数のn行目
石の値に対応し、B、C、Dを表す4つの数字の次のn行、

出力説明:

答えを表す整数

エントリー 

2
1926 817 2003 627
1949 1001 1234 4321

輸出

1952898

1≤n≤15,0≤ai、BI、CI、di≤1,000,000

少量のデータ、DFSができます

なぜ私はそれを書いていないゲームはありますか?

#include <bits/stdc++.h>
using namespace std;
const int N = 20;
typedef long long ll;
ll a[N], b[N], c[N], d[N];
int n;
ll dfs(int number, ll money, ll mofa){
	if(number == n + 1){
		return money * mofa;
	}
	ll temp = mofa - b[number];
	ll res = dfs(number + 1, money + a[number], temp < 0 ? 0 : temp);
	temp = money - d[number];
	res = max(res, dfs(number + 1, temp < 0 ? 0 : temp, mofa + c[number]));
	return res;
}
int main()
{
	scanf("%d", &n);
	for (int i = 1; i <= n; i++){
		scanf("%d %d %d %d", &a[i], &b[i], &c[i], &d[i]);
	}
	ll res = dfs(1, 0, 0);
	printf("%lld\n", res);
	return 0;
}

 

公開された143元の記事 ウォン称賛11 ビュー8209

おすすめ

転載: blog.csdn.net/weixin_43701790/article/details/103246330