整數求和(揹包問題)

2021-08-27 21:32:26 字數 678 閱讀 5898

題目描述

給定整數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 問 應該如何選擇裝入揹包的物品,使得裝入揹包中的物品的總價值最大?分析一波,面對每個物品,我們只有選擇拿取或者不拿兩種選擇,不能選擇裝入某物品的一部分,也不能裝入同一物品多次。解決辦法 宣告乙個 大...