動態規劃法求解0 1揹包問題2(改進演算法)

2021-09-29 23:35:38 字數 1059 閱讀 6729

#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揹包問題。資料...