0 1揹包和完全揹包問題應用

2021-08-04 09:49:26 字數 1015 閱讀 4963

/*

name: 0-1揹包和完全揹包問題應用

author:

date: 26-07-17 22:45

description:

0-1揹包問題應用:數字組合問題

有m個正整數1-m,找出其中和為n的可能的組合方式。如:

m=5,則5個數分別為1,2,3,4,5,n=5;

那麼可能的組合有5=1+4和5=2+3和5=5三種組合方式。

完全揹包問題應用:整數劃分問題

所謂整數劃分,是指把乙個正整數n寫成如下形式:

n=m1+m2+...+mi; (其中mi為正整數,並且1 <= mi <= n),則為n的乙個劃分。

如果中的最大值不超過m,即max(m1,m2,...,mi)<=m,則稱它屬於n的乙個m劃分。

這裡我們記n的m劃分的個數為f(n,m);

例如當n=5時,他有7個劃分,,,,,,,;

注意5=3+2 和 5=2+3被認為是同乙個劃分。

*/#include#includeusing namespace std;

const int n = 400;

int f1[n];

int f2[n];

int fun_1(int n, int m); //轉化為0-1揹包問題:將數字n拆分為不大於m的組合,一維陣列記錄最優解

int fun_2(int n, int m); //轉化為完全揹包問題:將數字n拆分為不大於m的組合,一維陣列記錄最優解

int main()

return 0;

} int fun_1(int m, int n) //轉化為0-1揹包問題:將數字n拆分為不大於m的組合,一維陣列記錄最優解 }

return f1[n];

}int fun_2(int m, int n) //轉化為完全揹包問題:將數字n拆分為不大於m的組合,一維陣列記錄最優解 }

return f2[n];

}

揹包問題(0 1揹包 完全揹包)

0 1揹包 有n件物品和乙個容量為v的揹包。第i件物品的費用是c i 價值是w i 求解將哪些物品裝入揹包可使價值總和最大。重要的點在於 每種物品僅有一件,可以選擇放 不放子問題 f i v 表示前i件物品恰好放入乙個 容量為v 的揹包可以獲得的最大價值。狀態轉移方程 遞推式 f i v max 考...

0 1揹包和完全揹包問題

有乙個容量為 n 的揹包,要用這個揹包裝下物品的價值最大,這些物品有兩個屬性 體積 w 和價值 v。定義乙個二維陣列 dp 儲存最大價值,其中 dp i j 表示前 i 件物品體積不超過 j 的情況下能達到的最大價值,每件物品只能被新增一次。設第 i 件物品體積為 w,價值為 v,根據第 i 件物品...

01 揹包問題和完全揹包

乙個旅行者有乙個最多能用m公斤的揹包,現在有n件物品,它們的重量分別是w1,w2,wn,它們的價值分別為c1,c2,cn.若每種物品只有一件求旅行者能獲得最大總價值。輸入的第一行為t,表示測試資料的組數。對於每組測試資料的第一行 兩個整數,m 揹包容量,m 200 和n 物品數量,n 30 第2.n...