9926 完全揹包

2021-09-28 10:09:32 字數 1020 閱讀 6464

time limit: 1 second

memory limit: 128 mb

設有n種物品,每種物品有乙個重量及乙個價值。但每種物品的數量是無限的,同時有乙個揹包,最大載重量為m,今從n種物品中

選取若干件(同一種物品可以多次選取),使其重量的和小於等於m,而價值的和為最大。

第一行:兩個整數,m(揹包容量,m<=200)和n(物品數量,n<=30);

第2..n+1行:每行二個整數wi,ci,表示每個物品的重量和價值。

僅一行,乙個數,表示最大總價值。

10 4

2 1

3 3

4 5

7 9

【題解】

【法一】

設f[i][j]表示前i個物品,所用的容量不超過j所能獲得的最大價值。

f[i][j] = max; (k*w[i] <=j)

對於第i個物品,可以選擇不拿(f[i-1][j]),也可以任意選擇k個。

這種二維的儲存方式比較容易理解。

#include #include int m,n,f[31][250],w[50],c[50];

void input_data()

void get_ans()

}}void output_ans()

int main()

【法二】

設f[j]表示容量不超過j的揹包所能裝得的最大價值。

f[j] = max;

這次j層迴圈要正向進行。

假設乙個物品的重量為1.

你更新完f[5],又可以更新f[6],f[7]...這樣就達到了每個物品可以多次拿的效果。

#include #include int m,n,f[250],w[50],c[50];

void input_data()

void get_ans()

void output_ans()

int main()

01揹包,完全揹包

動態規劃 動態規劃的核心是狀態以及狀態轉移方程。需要定義乙個 i,j 狀態以及該狀態的指標函式d i,j 01揹包 有n種物品,每種只有乙個,第i件物品的體積為vi質量為wi。選一些物品裝到體積為c的揹包中,使其體積不超過c的前提下重量最大。namevw abcd e 子問題定義 dp i j 表示...

(揹包二)完全揹包

public class beibaocomplete int weight int capacity 8 int value int weight int capacity 12 int result packagecomplete value,weight,capacity system.out...

揹包問題(完全揹包)

1.矩陣鏈乘法 2.投資組合問題 3.完全揹包問題 4.01揹包問題 5.最長公共子串行 乙個揹包,可以放入n種物品,物品j的重量和價值分別為,如果揹包的最大重量限制是b,怎麼樣選擇放入揹包的物品以使得揹包的總價值最大?組合優化問題,設表示裝入揹包的第j個物品的數量,解可以表示為。那麼目標函式和約束...