相關:
1023. 買書
揹包問題列舉體積:
體積恰好是j
:典型題:[完全揹包] 買書(完全揹包+裸題)
體積至少是j
:典型題:[01揹包] 潛水員(01揹包+二維費用揹包)
顯然,該問題應該是屬於第二種,且求解的是方案數。
完全揹包問題:f[i][j]=max(f[i-1][j], f[i][j-v]+w)
,這個是經典的完全揹包優化。優化到一維以後體積是從小到大順序列舉的,這是與 01 揹包很不同的乙個地方。
思路:
狀態轉移:
再就注意下本題,必須將錢n
花完,才是正確的狀態方案。可檢視示例 2:輸入 15 輸出 0。顯然,10 20 50 100 都是 10 的倍數,當輸入總錢數能被 10 整除時,錢肯定就能花完。且狀態從小到大進行轉移,最後剩下的這個餘數,比如 15,這個 15 就沒辦法轉移過去,所有狀態一直是 0。故,只有輸入是 10 的倍數的時候,才能獲取非 0 的方案數。
一維**:
#include
#include
using
namespace std;
const
int n =
1005
;int n;
int m[4]
=;int f[n]
;int
main()
cout << f[n]
<< endl;
return0;
}
二維**:
#include
#include
using
namespace std;
const
int n =
1005
;int n;
int m[5]
=;// 方便 i-1
int f[5]
[n];
intmain()
} cout << f[4]
[n]<< endl;
return0;
}
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個物品的數量,解可以表示為。那麼目標函式和約束...