日期:2025年7月23日
ZeroJudge 題目連結:b511. 換銅板
解題想法
這題我用函式遞迴窮舉所有面額硬幣、數量、總金額的組合,如果遇到總金額符合題目要求的組合就輸出答案。
Python 程式碼
使用時間約為 19 ms,記憶體約為 3.3 MB,通過測試。
def solve():
import sys
n = int(sys.stdin.readline()) # n 種面額
coins = sorted(list(map(int, sys.stdin.readline().split()))) # 硬幣面額,由小到大排序
target = int(sys.stdin.readline()) # 目標
### 主要的解題過程 ###
def backtrack(curr, nums, total):
if total == target: # 遞迴出口,符合目標
s = "(" + ",".join(map(str, nums)) + ")" # 要輸出的字串
sys.stdout.write(f"{s}\n")
return
if curr == n or total > target: # 遞迴出口,已經到最後一種面額或超過目標
return
maxn = (target-total) // coins[curr] # 這個面額可用的最大數量
for i in range(maxn+1): # 依序測試 0 ~ maxn 個
nums[curr] = i # 設定這個面額的數量
backtrack(curr+1, nums, total + coins[curr]*i) # 遞迴
### End of backtrack ###
backtrack(0, [0]*n, 0) # 從索引值 0、個數 0、加總 0 開始測試
### End of solve ###
if __name__ == "__main__":
solve()