uva10626(記憶化搜尋)

2021-07-10 06:23:01 字數 1074 閱讀 8268

題目大意:

一瓶可樂需要花8元,自動販售機只收1元,5元,10元。每次插入的錢只能買一瓶。

給出n瓶可樂,請問最少插入幾次錢可以買到所需要數量的可樂。

思路:

一共有以下幾種情況:

8個1元 插入8次

3個1元 乙個5元 插入4次

3個1元 乙個10元 插入4次 找5元

1個10元 插入1次 找2*1元

2個5元 插入2次 找2*1元

列舉出這些情況,然後找出需要插入次數最少的。

注意陣列的大小,一元硬幣可能不止500個,因為售賣機會找你錢

**:

#include 

using

namespace

std;

#include

#include

const

int inf = 0x7ffffff;

int dp[705][175][55];

int d(int n,int n1,int n5,int n10)

int main()

}// cout << n << n1<< n5<< n10}

return

0;}

重新做這一題,原本很愚蠢地想說就直接乙個迴圈就可以了,不需要遞迴,結果發現和這樣做結果是錯的,我是按照插入的數量由少到多來安排if的語句。。太愚蠢了

這樣的話,最後乙個輸入的答案會是150。。可是148更少

#include 

using

namespace

std;

#include

#include

int main()

else

if(n10)

else

if(n5 >= 2)

else

if(n5 && n1 >= 3)

else

if(n10 && n1 >= 3)

}printf("%d\n",count);

}return

0;}

uva 116 (記憶化搜尋)

題意 如圖,從左到右走,每次可以往左上 up 左 fo 左下 dn 走,當走到第一行或最後一行時可以如圖穿越。求一條權值最小的路徑,並列印字典序最小的路徑。解析 狀態轉移方程 dp i j min dp i 1 m m j 1 up dp i j 1 fo dp i 1 m j 1 dn 字典序最小...

UVA 1629 記憶化搜尋

有乙個n行m列的蛋糕,切蛋糕,要求最後每一塊蛋糕上恰好有乙個櫻桃。問切割線總長度最小是多少?記憶化搜尋。設dp l r u d 為切割從橫向從l到r,縱向從u到d的一塊蛋糕,切割線總長度的最小值。然後不斷dfs搜尋並記錄dp值,最後dp 0 m n 0 即為所求。include include in...

UVA 1630 記憶化搜尋

輸入乙個字串,摺疊成乙個盡量短的串。問最短可以摺疊成什麼樣子的乙個串。設dp i j 為字串i到j摺疊成最短的字串後的長度,ss i j 為字串i到j摺疊成的最短的字串。dfs 記憶化搜尋即可。輸入的字串右邊界為str.size 1,需要特別注意。include include include in...