記憶化搜尋 vijos 1599 貨幣

2021-07-15 10:44:44 字數 921 閱讀 3152

又是一道水題

在某個神秘的星球上有一種貨幣,它有一種奇怪的兌換規則

你有且僅有一枚面值為n的金幣,你可以去銀行進行兌換,也可以不兌換

如果去銀行兌換,兌換的規則是這樣的:用面值為a的金幣去兌換可以換到a/2,a/3,a/4這三枚硬幣(如果

是小數則截尾取整),你可以兌換多次

讀入n輸出你最後最多能擁有的錢數w

每個測試點中有t組資料

乙個數t表示該點的測試資料組數(1=輸出t行(一一對應)

每行乙個整數就是你最後最多擁有的錢數w

2

122

13

2

各個測試點3s

小心資料較大,但是不需要高精度

思路:

記憶化搜尋,資料比較大

**:

#include #include #include #include using namespace std;

typedef mapmii;

typedef vectorvi;

typedef pairpii;

typedef long long ll;

const int n = 40000000;

ll f[n];

int ans;

ll dp(ll x)

if(x < 40000000 && f[x])//注意陣列越界

return f[x];

max = max(x, dp(x/2)+dp(x/3)+dp(x/4));

if(x < 40000000)

return max;

}int main()

return 0;

}

記憶化搜尋 vijos1547

雖然在 vj 分類中被定義為記憶化搜尋,但是,實在是找不出 體現了記憶化,最多加個剪紙優化。一開始所有的車子都是在1號城市中的。搜尋過程是這樣的 用陣列 way i j 表示從城市 i 到城市 j 的路程,因為不會有回頭路,反向邊初始化為無窮大 用 ans 保留目前最優解 void dfs int ...

記憶化搜尋

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

記憶化搜尋

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