今天終於對記憶化搜尋有點認識了

2021-06-16 03:39:55 字數 976 閱讀 3517

dp與記憶化搜尋關聯密切,原來一直搜尋題瞬間就能寫出**,一遇到記憶化,就暈了,發現怎麼也沒法記,今天發現我的搜尋方向不對。

以後自頂向下搜尋,這樣的話,前面狀態先計算出來,而要用到的是後面的狀態,所以不知道怎麼記錄。用題目說明。

時間限制:

3000 ms 記憶體限制:

65535 kb

描述這會,定向越野進行到白熱化階段,38211x小班的n個同學正分布在北航平面上各處。當然,這時候還有3820xx小班,3801xx小班等等各個小班的很多同學都在參加這個比賽。由於大家玩得都很起勁,本著友誼第一比賽第二的原則,裁判決定,換個方式,也就是不按原來的方式進行裁定。而新的方式具有一定隨機性,所以誰是贏家也就算隨機的了。

裁定方式如下

對平面上n個同學,兩兩結成隊友關係,對於每個隊友關係,求兩個人之間距離,a1,a2,a3...an/2代表每個小隊的距離值

然後結果值即為sum=求和(a1,a2,a3,a4...an/2)。

顯然,雖然38211x小班的同學此時的位置是固定的,但是他們結隊的方式是可以由自己決定的,身為班長的你,會怎麼來安排這樣結隊關係,讓sum的值最小呢?

輸入對每組資料

數字n(1<=n<=8)

代表共n對結隊關係

下面的2*n行每行為這位同學在平面上的座標x,y(1<=x<=1000&&1<=y<=1000,且x和y都為整數)

多個同學不會在同乙個位置

以0表示檔案結尾

輸出對每組資料,輸出最小的sum值,結果保留2位小數

樣例輸入

3

10 10

1 12 2

3 34 4

5 50

樣例輸出

9.90

開始我的過程如此:這個過程,只是把前面的狀態儲存了,結果怎麼就不能記錄下來,後來發現,我要用後面的狀態!!!!

and then,把**改一下~~只是記錄狀態改了而已,結果就可以了……

記憶化搜尋

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

記憶化搜尋

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

記憶化搜尋

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