#include
#include
using
namespace std;
int p[
1000][
1000];
//p存放跳躍點集合,第一列存放物品的質量w,第二列存放物品的價值v
int x[5]
=,head[
100]
;//head是指向各個階段跳躍點集合的開始
int w=10;
template
<
class
t>
t gknapsack
(int n,t w[
],t v)
if(k<=right&&p[k][0
]==y)
//質量相同取價值最大
if(m>p[next-1]
[1])
//質量額價值都大於p中最後乙個則加進來
while
(k<=right&&p[k][1
]<=p[next-1]
[1])
//受控點不加入
}while
(k<=right)
//加入上一次質量大於本次最大不超過w的質量的資料
left=right+1;
right=next-1;
head[i]
=next;
}return p[next-1]
[1];
}template
<
class
t>
void
traceback
(int n,t w[
],t v)
//輸出最優解}}
for(
int i=
0; iintmain()
,v=,maxvalue=0;
maxvalue=
gknapsack
(n,w,v)
; cout
(n,w,v)
;return0;
}
動態規劃法求解0 1揹包問題
有n個重量分別為的物品,它們的價值分別為,給定乙個容量為w的揹包。設計從這些物品中選取一部分物品放入該揹包的方案,每個物品要麼選中要麼不選中,要求選中的物品不僅能夠放到揹包中,而且重量和為w具有最大的價值。對於可行的揹包裝載方案,揹包中物品的總重量不能超過揹包的容量。最優方案是指所裝入的物品價值最高...
0 1揹包問題 動態規劃法
問題描述 給定n種物品和一揹包。物品i的重量是w i 其價值為v i 揹包的容量為c。問應如何選擇裝入揹包的物品,使得裝入揹包中物品的總價值最大?分析 對於一種物品,要麼裝入揹包,要麼不裝。所以對於一種物品的裝入狀態可以取0和1。設物品i的裝入狀態為xi,xi 0,1 此問題稱為0 1揹包問題。資料...
0 1揹包問題 動態規劃法
問題描述 給定n種物品和一揹包。物品i的重量是w i 其價值為v i 揹包的容量為c。問應如何選擇裝入揹包的物品,使得裝入揹包中物品的總價值最大?分析 對於一種物品,要麼裝入揹包,要麼不裝。所以對於一種物品的裝入狀態可以取0和1。設物品i的裝入狀態為xi,xi 0,1 此問題稱為0 1揹包問題。資料...