換零錢問題(詳解) 動態規劃

2021-08-20 04:10:47 字數 1224 閱讀 3391

經典找零錢問題。領給你乙個陣列arr,和乙個整數aim.如果可以任意選擇arr中的陣列,能不能累加得到aim.返回true或者false。左神版。

package 演算法初級;

import tool.myarraystool;

/** * @title 換零錢問題

* @description 給你乙個陣列arr,和乙個整數aim,如果可以任意選擇arr中的數字,判斷能否累加到aim

* @thinking 1、暴力遞迴 2、動態規劃

* @author xiaox

* @data 2023年5月20日

*/public class money_problem

if (i == arr.length)

return money(arr, i + 1, aim - arr[i]) || money(arr, i + 1, aim);

} /**

* 暴力遞迴->動態規劃

* 可變引數 i 和 aim ,當兩者的的值確定了 money(i, aim)的值就確定了。

* 1、建立二維陣列res,i代表行, aim代表列; 行 < arr.length + 1 ; 列 < aim + 1;

* 2、要求位置:我們需要的位置是res[0][aim]這個位置的值;

* 3、base case ;返回暴力遞迴中21-26行,也就是說當res陣列的第0列的值為true; 第arr.length行從第二個位置開始的值為false;

* 4、普通位置的狀態,根據遞迴中剩下的**決定:對於res陣列中的普通位置 (i , aim)來說 其狀態取決於陣列中(i + 1, aim - arr[i])

* 和(i + 1, aim)的狀態,只要有乙個為true就為true;

*/public static boolean money1(int arr, int aim)

// 最後一行賦值

for (int j = 1; j <= col; j++)

// 普通狀態賦值

for (int j = row - 1; j >= 0; j--)

} return res[0][col];

} //對數器

public static void main(string args)

} system.out.println(result ? "yes" : "****");

}}

動態規劃題目(一) 換零錢

動態規劃題目 一 換零錢 想兌換100元錢,有1,2,5,10四種錢,問總共有多少兌換方法。下面提供兩種實現方式,其中 注釋的很清楚。關於動態規劃的基本原理,參考 動態規劃 includeusing namespace std const int n 100 int dimes int arr n ...

動態規劃零錢問題

問題 給你 k 種面值的硬幣,面值分別為 c1,c2 ck,每種硬幣的數量無限,再給乙個總金額 amount,問你最少需要幾枚硬幣湊出這個金額,如果不可能湊出,演算法返回 1 比如說 k 3,面值分別為 2,5,10,總金額 amount 11。那麼最少需要 4枚硬幣湊出,即 11 5 2 2 2。...

動態規劃 , 零錢問題。

動態規劃 核心思想,找到最優子結構,組合子問題構成原問題的解。最重要的是,找到最優子結構,這是最難的部分 例題 我們有面值為1元3元5元的硬幣若干枚,如何用最少的硬幣湊夠11元?首先找到問題的子結構 1 選擇硬幣作為子結構變數,第一次選擇只有1元硬幣,求出構成11元硬幣的方案集合a1,第二次選擇有1...