題目描述
給定整數n,取若干個1到n的整數可求和等於整數m,程式設計求出所有組合的個數。比如當n=6,m=8時,有四種組合:[2,6], [3,5], [1,2,5], [1,3,4]。限定n和m小於120
輸入:
整數n和m
輸出:
求和等於m的所有組合的個數。
樣例:
輸入:
6 8
輸出 4
方法典型的揹包問題
def
fun(s, li, n):
global sum
if s == 0:
return
true
if s < 0
or (s > 0
and n < 1):
return
false
if fun(s-li[n-1], li, n-1): # 選中n
sum += 1
if fun(s, li, n-1): ## 不選n
sum += 1
if __name__ == '__main__':
n = 6
m = 7
sum = 0
fun(m, list(range(1, n+1)), 6)
print(sum)
非整數揹包
description 現有一筆經費可以報銷一定額度的發票。允許報銷的發票型別包括買圖書 a類 文具 b類 差旅 c類 要求每張發票的總額不得超過1000元,每張發票上,單項物品的價值不得超過600元。現請你編寫程式,在給出的一堆發票中找出可以報銷的 不超過給定額度的最大報銷額。input 測試輸入...
揹包問題 01揹包問題
n個物品,總體積是v,每個物品的體積的vi,每個物品的最大價值是wi,在不超過v的體積下求最大價值 eg揹包容積為 5 物品數量為 4 物品的體積分別為 物品的價值分別為 思路定義乙個二位陣列int f new int n 1 v 1 f i j 就表示在1 i個物品中選取體積小於v的情況的最大價值...
01揹包問題 完全揹包問題 多重揹包問題
0 1 揹包問題 給定 n 種物品和乙個容量為 c 的揹包,物品 i 的重量是 wi,其價值為 vi 問 應該如何選擇裝入揹包的物品,使得裝入揹包中的物品的總價值最大?分析一波,面對每個物品,我們只有選擇拿取或者不拿兩種選擇,不能選擇裝入某物品的一部分,也不能裝入同一物品多次。解決辦法 宣告乙個 大...