标签:10 used 21 递归 python 零钱 print coin change
也是常见套路。
# coding = utf-8 def rec_mc(coin_value_list, change, know_results): min_coins = change if change in coin_value_list: know_results[change] = 1 return 1 elif know_results[change] > 0: return know_results[change] else: for i in [c for c in coin_value_list if c <= change]: num_coins = 1 + rec_mc(coin_value_list, change-i, know_results) if num_coins < min_coins: min_coins = num_coins know_results[change] = min_coins return min_coins print("===========递归实现========================") print(rec_mc([1, 5, 10, 25], 63, [0]*64)) def dp_make_change(coin_value_list, change, min_coins, coins_used): for cents in range(change+1): coin_count = cents new_coin = 1 for j in [c for c in coin_value_list if c <= cents]: if min_coins[cents-j] + 1 < coin_count: coin_count = min_coins[cents-j]+1 new_coin = j min_coins[cents] = coin_count coins_used[cents] = new_coin return min_coins[change] def print_coins(coins_used, change): coin = change while coin > 0: this_coin = coins_used[coin] print(this_coin) coin = coin - this_coin a_mnt = 63 c_list = [1, 5, 10, 21, 25] c_used = [0] * (a_mnt+1) c_count = [0] * (a_mnt+1) print("===========动态规划实现========================") print('Making change for ', a_mnt, 'requires') print(dp_make_change(c_list, a_mnt, c_count, c_used), 'coins') print("They are: ") print_coins(c_used, a_mnt) print("The used list is as follows: ") print(c_used)
输出:
D:\cheng\test\Scripts\python.exe tests.py ===========递归实现======================== 6 ===========动态规划实现======================== Making change for 63 requires 3 coins They are: 21 21 21 The used list is as follows: [1, 1, 1, 1, 1, 5, 1, 1, 1, 1, 10, 1, 1, 1, 1, 5, 1, 1, 1, 1, 10, 21, 1, 1, 1, 25, 1, 1, 1, 1, 5, 10, 1, 1, 1, 10, 1, 1, 1, 1, 5, 10, 21, 1, 1, 10, 21, 1, 1, 1, 25, 1, 10, 1, 1, 5, 10, 1, 1, 1, 10, 1, 10, 21] Process finished with exit code 0
标签:10,used,21,递归,python,零钱,print,coin,change 来源: https://www.cnblogs.com/aguncn/p/10674745.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。