題解 戳西瓜

2021-10-10 13:07:21 字數 1735 閱讀 8889

有 n 個西瓜,編號為 0

00 到 n−1

n-1n−

1 ,每個西瓜上都標有乙個數字,這些數字存在陣列 num

snums

nums

中。現在要求你戳破所有的西瓜。每當你戳破乙個西瓜i

ii時,你可以獲得 num

s[le

ft]∗

nums

[i]∗

nums

[rig

ht

]nums[left]*nums[i]*nums[right]

nums[l

eft]

∗num

s[i]

∗num

s[ri

ght]

個硬幣。這裡的 lef

tleft

left

和 righ

tright

righ

t 代表和 i

ii 相鄰的兩個西瓜的序號。注意當你戳破了西瓜 i

ii 後,西瓜 lef

tleft

left

和西瓜 rig

ht

right

righ

t 就變成了相鄰的西瓜。求所能獲得硬幣的最大數量。

資料範圍與提示:

::你可以假設 num

s[−1

]=nu

ms[n

]=

1nums[-1]=nums[n]=1

nums[−

1]=n

ums[

n]=1

,但注意它們不是真實存在的西瓜,所以並不能被戳破。

假設 dp[

i][j

]dp[i][j]

dp[i][

j]表示開區間 (i,

j)

(i,j)

(i,j

) 內你能拿得最多的硬幣。

那麼在這個情況下(i,

j)

(i,j)

(i,j

)開區間得到的金幣可以由 dp[

i][j

]dp[i][j]

dp[i][

j]和 dp[

k][j

]dp[k][j]

dp[k][

j]進行轉移,如果你此刻選擇戳爆 k

kk ,那麼你得到的金幣數量就是dp[

i][k

]+nu

ms[i

]∗nu

ms[k

]∗nu

ms[j

]+dp

[k][

j]

dp[i][k]+nums[i]*nums[k]*nums[j]+dp[k][j]

dp[i][

k]+n

ums[

i]∗n

ums[

k]∗n

ums[

j]+d

p[k]

[j]

#include .h>

using namespace std;

const

int m =

505;

int a[m]

, dp[m]

[m];

int n;

intmain()

}printf

("%d"

, dp[0]

[m -1]

);return0;

}

To Heart 題解 戳西瓜

請不要吝嗇你的點讚!有 n 個西瓜,編號為0 到 n 1,每個西瓜上都標有乙個數字,這些數字存在陣列 nums 中。現在要求你戳破所有的西瓜。每當你戳破乙個西瓜 i 時,你可以獲得 nums left nums i nums right 個硬幣。這裡的 left 和 right 代表和 i 相鄰的兩...

區間DP 戳西瓜(c )

前言 今天中午筆者立下了乙個flag帖,晚自習的筆者來解決flag了!參考題解 題目描述 有 n 個西瓜,編號為0 到 n 1,每個西瓜上都標有乙個數字,這些數字存在陣列 nums 中。現在要求你戳破所有的西瓜。每當你戳破乙個西瓜 i 時,你可以獲得 nums left nums i nums ri...

生西瓜,熟西瓜

終於又可以有抱上幾天兒子了。想著讓兒子吃點新鮮的水果,所以給他和家人買了些西瓜。記憶中西瓜還要在過幾個周才能下來。但是成車的西瓜現在已經擺到了門口。買了兩個,花了24元錢 1.3元 斤 真是不便宜。誰讓中國人好吃個鮮呢,這會的西瓜貴些還是有道理的。等切開西瓜,發現和前段時間同事買的西瓜很類似,總是半...