最佳觀光組合 動態規劃

2022-09-11 20:51:20 字數 1039 閱讀 3755

題目** :leetcode第1014題

在看題目解析之前,我一直在推公式,然而得到的公式卻沒什麼鬼用,可能我太蠢了,dp問題也太tm難了,嗚嗚嗚嗚嗚。

言歸正傳,貼上題目。

題目要求 \(values[i] + values[j] + i - j\) ,因為 \(i < j\) ,所以當我們要選 \(j\) 間房子是,我們要在前面 \([0,j - 1]\) 之間選個房子 \(i\)。

所以公式可以分成 \(values[i] + i\) 和 \(values[j] - j\) ,當我們要選 \(j\) 號房子是,因為 \(values[j] - j\) 項是乙個固定值,所以我們就要在前面 \([0,j - 1]\) 間尋找乙個最優解.由最值定理可知當 \(values[i] + i\) 是 \([0,j - 1]\) 的最優解時,則 \(i\) 就是 \([0 , i - 1]\) 後的最優解。所以利用動態規劃來解決此問題。

設 \(dp[i]\) 為 \([0 , i]\) 的 \(values[i] + i\) 最優解,所以狀態轉移方程為:

\[dp[i] = max(dp[i - 1] , values[i] + i)

\]最後利用乙個變數來記錄當前 \(values[i] + values[j] + i - j\) 的最大值即可。

**中狀態轉移方程是:

\[dp[i] = max(dp[i - 1] , values[i - 1] + i - 1)

\]\(values[i - 1] + i - 1\) 的原因是因為,\(dp[i]\) 中 \(i\) 的定義域是 \(from 1 to n\) 的,所以對應的 \(values[i]\) 的定義域想要對應上,則要 \(i - 1\) 。

class solution 

return ans;}};

因為狀態轉移方程只與 \(i\) 和 \(i - 1\) 有關,所以可以利用滾動陣列來減少記憶體消耗。

1014 最佳觀光組合

給定正整數陣列a,a i 表示第i個觀光景點的評分,並且兩個景點i和j之間的距離為j i。一對景點 i j 組成的觀光組合的得分為 a i a j i j 景點的評分之和減去它們兩者之間的距離。返回一對觀光景點能取得的最高分。示例 輸入 8,1,5,2,6 輸出 11 解釋 i 0,j 2,a i ...

415,最佳觀光組合

給定正整數陣列 a,a i 表示第 i 個觀光景點的評分,並且兩個景點 i 和 j 之間的距離為 j i。一對景點 i j 組成的觀光組合的得分為 a i a j i j 景點的評分之和減去它們兩者之間的距離。返回一對觀光景點能取得的最高分。示例 輸入 8,1,5,2,6 輸出 11 解釋 i 0,...

leetcode 1014 最佳觀光組合

給定正整數陣列 a,a i 表示第 i 個觀光景點的評分,並且兩個景點 i 和 j 之間的距離為 j i。一對景點 i j 組成的觀光組合的得分為 a i a j i j 景點的評分之和減去它們兩者之間的距離。返回一對觀光景點能取得的最高分。這道題目直接的做法是遍歷每一種組合,這裡採用一種比較巧妙的...