記憶化搜尋

2021-08-14 06:58:21 字數 920 閱讀 9101

時間限制:c/c++ 1秒,其他語言2秒

空間限制:c/c++ 131072k,其他語言262144k

64bit io format: %lld

給定兩個長度為n的整數列a和b,每次你可以從a數列的左端或右端取走乙個數。假設第i次取走的數為a

x,則第i次取走的數的價值v

i=bi⋅a

x,現在希望你求出∑v

i的最大值。

第一行乙個數t,表示有t組資料。

對於每組資料,第一行乙個整數n,

接下來兩行分別給出a數列與b數列。

每一組資料輸出一行,最大的∑vi。
示例1

2

21 1000

2 15

1 3 5 2 4

1 2 3 4 5

2001

52

對於第二個樣例,

第一次從左邊取走a1,v1=a1⋅b1=1,

第二次從左邊取走a2,v2=a2⋅b2=6,

第三次從右邊取走a5,v3=a5⋅b3=12,

第四次從右邊取走a4,v4=a4⋅b4=8,

第五次取走剩下的a3,v5=a3⋅b5=25。

總價值∑vi=1+6+12+8+25=52

t≤10

1≤n≤10

31≤a

i,bi≤10

3#include#include#include#includeint a[1002],b[1002],n,dp[1002][1002];

using namespace std;

int dfs(int step,int x,int y)

int main()

return 0;

}

記憶化搜尋

演算法上依然是搜尋的流程,但是搜尋到的一些解用 動態規劃 的那種思想和模式作一些儲存。一般說來,動態規劃總要遍歷所有的狀態,而搜尋可以排除一些無效狀態。更重要的是搜尋還可以剪枝,可能剪去大量不必要的狀態,因此在空間開銷上往往比動態規劃要低很多。記憶化演算法在求解的時候還是按著自頂向下的順序,但是每求...

記憶化搜尋

記憶化搜尋 演算法上依然是搜尋的流程,但是搜尋到的一些解用動態規劃的那種思想和模式作一些儲存。記憶化演算法在求解的時候還是按著自頂向下的順序,但是每求解乙個狀態,就將它的解儲存下來,以後再次遇到這個狀態的時候,就不必重新求解了。例1.題目描述 給從左至右排好隊的小朋友們分糖果,要求 1.每個小朋友都...

記憶化搜尋

原文 感謝作者。一.動態規劃 動態規劃 dynamic programming 與 分治思想 有些相似,都是利用將問題分 為子問題,並通過合併子問題的解來獲得整個問題的解。於 分治 的不同之處在 於,對於乙個相同的子問題動態規劃演算法不會計算第二次,其實現原理是將每乙個計算過的子問題的值儲存在乙個表...