又是一道水題
在某個神秘的星球上有一種貨幣,它有一種奇怪的兌換規則
你有且僅有一枚面值為n的金幣,你可以去銀行進行兌換,也可以不兌換
如果去銀行兌換,兌換的規則是這樣的:用面值為a的金幣去兌換可以換到a/2,a/3,a/4這三枚硬幣(如果
是小數則截尾取整),你可以兌換多次
讀入n輸出你最後最多能擁有的錢數w
每個測試點中有t組資料
乙個數t表示該點的測試資料組數(1=輸出t行(一一對應)
每行乙個整數就是你最後最多擁有的錢數w
2122
132
各個測試點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.每個小朋友都...