動態規劃(一) 找零問題

2021-08-21 20:49:23 字數 828 閱讀 9130

有陣列penny,penny中所有的值都為正數且不重複。每個值代表一種面值的貨幣,每種面值的貨幣可以使用任意張,再給定乙個整數aim(小於等於1000)代表要找的錢數,求換錢有多少種方法。

給定陣列penny及它的大小(小於等於50),同時給定乙個整數aim,請返回有多少種方法可以湊成aim。

測試樣例:

[1,2,4],3,3
返回:2
方法一(暴力搜尋法)

class exchange 

int foo(const vector& arr, int index, int aim)

return ret;

}};

方法二(記憶化搜尋方法)

class exchange 

if (penny.empty() || aim == 0) return 0;

return foo(penny, 0, n,aim,dp);

}int foo(const vector& arr, int index, int n,int aim,int (*dp)[1000])

else

else}}

dp[index][aim]=(res==0)?-1:res;

return res;

}};

方法三(動態規劃方法)

class exchange 

else

}for(int i=1;i}

return dp[n-1][aim];

}};

找零問題 動態規劃

當乙個幣值組合用貪婪演算法不能找出最優解的時候,比如對於 1,2,5 7,10。如果找14元錢的話,貪婪演算法答案是10,2,2,但最優解為7,7。那麼利用動態規劃就能找出最優解,只是時間和空間複雜度都很高,o nm 首先寫出狀態方程 f i 1,x 如果v i x 即當如果當前選擇的幣值大於找零的...

硬幣找零問題(動態規劃)

給定指定的硬幣種類,面值為 1,3,5 在此具體化些 給定所找零的錢數 sum,給出最少的硬幣找零數,每個種類的硬幣無限使用。看到這問題,當時我想到用貪心演算法來求解,最後求解方案因為巧合對了,後來在網上看到動態規劃的題目,才知道貪心演算法得不到最優解,比如 給定 面值為 1,3,4,給定找零數為 ...

硬幣找零問題 動態規劃問題

看到了 這文章,由於我不太懂他的 所以我按他的題和思路,寫了 思路我就不寫了,就是動態規劃的思路,先保證區域性最優,再慢慢向全區域性最優 include include include include using namespace std const int m 100 int coinsum m...