python解決揹包 揹包變形問題

2021-09-27 03:05:18 字數 1946 閱讀 1746

有n件物品和乙個容量為v的揹包。第i件物品的費用是c[i],價值是w[i]。求解將哪些物品裝入揹包可使價值總和最大。

這是最基礎的揹包問題,特點是:每種物品僅有一件,可以選擇放或不放。

例如: 揹包的承重為10,現在有a,b,c,d,e五件物品,每件物品的重量分別為2,2,6,5,4,價值分別為6,3,5,4,6

輸入:

第一行輸入揹包最大承重量

第二行輸入n個物品的重量

第三行輸入n個物品的價值

輸出:揹包可以裝的最大價值

輸入:10

2 2 6 5 4

6 3 5 4 6

輸出:15

def pack(weight, value, n):

dp = [[0 for _ in range(n + 1)] for _ in range(len(weight) + 1)]

for i in range(1, len(weight) + 1):

for j in range(1, n + 1):

if j < weight[i - 1]:

dp[i][j] = dp[i - 1][j]

else:

dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i - 1]] + value[i - 1])

return dp[-1][-1]

n = int(input())

weight = list(map(int, input().split()))

value = list(map(int, input().split()))

print(pack(weight, value, n))#結果為15

三維揹包問題

揹包有最大的承載重量,也有最大的承載體積,每個物品有自己的重量,也有自己的體積,也有自身的價值,問在不超過揹包體積和重量的情況下,使得價值最大(每個物品都是只有乙個)

輸入:

第一行輸入乙個數,表示一共有n個物品

第二行輸入倆個數,第乙個數是揹包的體積,第二個數是揹包的最大承重量

下面每一行代表乙個物品,有三個數,第乙個數是該物品的體積,第二個是該物品的重量,第三個數是該物品的價值

輸出:揹包所能裝物品的最大價值

如:輸入:

415 10

5 1 1000

2 3 3000

5 2 15000

10 4 16000

輸出:31000

python開發的一些知識點

揹包dp之01揹包變形

一種雙核cpu的兩個核能夠同時的處理任務,現在有n個已知資料量的任務需要交給cpu處理,假設已知cpu的每個核1秒可以處理1kb,每個核同時只能處理一項任務。n個任務可以按照任意順序放入cpu進行處理,現在需要設計乙個方案讓cpu處理完這批任務所需的時間最少,求這個最小的時間。輸入描述 輸入包括兩行...

揹包變形 思路

居民集會 藍橋村的居民都生活在一條公路的邊上,公路的長度為l,每戶家庭的位置都用這戶家庭到公路的起點的距離來計算,第i戶家庭距起點的距離為di。每年,藍橋村都要舉行一次集會。今年,由於村里的人口太多,村委會決定要在4個地方舉行集會,其中3個位於公路中間,1個位最公路的終點。已知每戶家庭都會向著遠離公...

01揹包變形

傳送門 現有n個物品,序號分別為1,2,n。對於每個i 1 i n 物品i有乙個體積wi和乙個價值vi。小明想在這n個物品中選取一些放到揹包裡帶回家。已知揹包的容積為w,這意味著所帶物品的總體積不能超過w。求出小明可以帶回家的物品總價值可能的最大值。constraints input 標準輸入格式如...