有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 標準輸入格式如...