經典找零錢問題。領給你乙個陣列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...