Menu
CoddyTech

Burst Balloons

むずかしい動的計画法python iconjava iconcpp iconc iconjs icon+10

風船が一列に並んでおり、nums として与えられます。nums[i] は風船 i に書かれた数字です。すべての風船を、好きな順番で1つずつ割ります。風船を割ると、left × nums[i] × right 枚のコインを獲得できます。ここで left と right は、その時点で風船の左右にある隣の風船の数字です。つまり、まだ列に残っている風船のうち、各方向で最も近い風船の数字です。列の端の外側に隣の風船がない場合は、1 として扱います。風船を割ると、両隣の風船が隣り合います。獲得できるコインの最大枚数を返してください。

関数

maxCoins(nums: integer-array) → integer
numsinteger-array
風船に書かれた数字を左から右へ
戻り値integer
すべての風船を割って集められるコインの最大数

制約

  • 1 ≤ nums.length ≤ 300
  • 0 ≤ nums[i] ≤ 100
  • 答えは 3 × 108 未満なので、32 ビット符号付き整数に収まります。

例

入力
nums = [2, 4, 3]
出力
33
説明
最初に4を割ると、2 × 4 × 3 = 24コインを獲得します。2と3が隣り合うようになったので、次に2を割ると1 × 2 × 3 = 6を獲得し、最後に残った3を割ると1 × 3 × 1 = 3を獲得します。合計で33となり、これより良い順序はありません。小さい方の2を最初に割ると、獲得できるのは最大でも24にとどまります。

lock icon提出時に隠しテスト+15件

challenge icon

発展問題

最も多くのコインを獲得できる、もう1つの破裂順序も返せますか?

コードをリセット
def maxCoins(nums):
    # ここにコードを書いてください
テストケース

ケース1

ケース2

ケース3

入力

nums = [2, 4, 3]

期待値

33