原貼
一開始學揹包問題時遇到的大多數的狀態表示是:從前\(i\)個物品中選,且總體積至多是\(j\)的問題。
慢慢地在提高課中,就有出現狀態表示是:從前\(i\)個物品中選,且總體積恰好是\(j\)的問題。例如 \(acwing\)
\(1023\). 買書 ,求的是恰好是\(j\)的總方案數問題。
同時還出現了狀態表示是:從前\(i\)個物品中選,且總體積至少是\(j\)的問題。例如 \(acwing\)
\(1020\). 潛水員 ,求的是總體積至少是\(j\)的最小價值。
可以觀察到,他們的分析方法以及狀態轉移方程都是一樣的,唯獨是初始化有很大的不同。
二維情況
體積至多\(j\), \(f[0][i] = 1\), \(0 <= i <= m\),其餘是\(0\)
示例體積恰好\(j\), \(f[0][0] = 1\), 其餘是\(0\)
示例體積至少\(j\), \(f[0][0] = 1\), 其餘是\(0\)
示例一維情況
體積至多\(j\), \(f[i] =1\), \(0 <= i <= m\)
示例體積恰好\(j\), \(f[0] =1\), 其餘是\(0\)
示例體積至少\(j\), \(f[0] =1\), 其餘是\(0\)
示例二維情況
體積至多\(j\),\(f[i,k] = 0\),\(0 <= i <= n, 0 <= k <= m\)(只會求價值的最大值)示例
體積恰好\(j\):
體積至少\(j\),\(f[0][0] = 0\),其餘是\(inf\)(只會求價值的最小值) 示例
一維情況
體積至多\(j\),\(f[i] = 0, 0 <= i <= m\)(只會求價值的最大值) 示例
體積恰好\(j\):
體積至少\(j\),\(f[0] = 0\),其餘是\(inf\)(只會求價值的最小值) 示例
01揹包的變形問題 揹包恰好裝滿
在看本文之前建議先看一下我之前發過的01揹包詳解。在前面講到的01揹包問題中,現在我們把條件改為 求當揹包恰好裝滿時候取得的最大價值 這樣的問題其實本質上和原始的01揹包問題區別不大,我們只需要做出一點小小的調整。需要指出的是該問題其實可分為兩個問題。1 揹包能否恰好裝滿?2 如果能恰好裝滿,恰好裝...
01揹包變式 要求恰好裝滿的01揹包
ktv裡面有n首歌曲你可以選擇,每首歌曲的時長都給出了.對於每首歌曲,你最多只能唱1遍.現在給你乙個時間限制t t 10 9 問你在最多t 1秒的時間內可以唱多少首歌曲num 且最長唱歌時間是多少time time必須 t 1 最終輸出num 1 和 time 678 即可.注意 你需要優先讓歌曲數...
揹包問題 01揹包總結
寫這篇部落格的原因是因為自己初學揹包的時候覺得好玄學。只是知道怎麼寫,但是具體是為什麼覺得很玄妙。在此其實希望和我一樣的小白萌新早點明白其中的原理,其實原理很簡單,只要懂了這個圖,我想01揹包就不成問題了。首先要明確這張表是至底向上,從左到右生成的。關於01揹包的題目暫時整理了一點。1.簡單01揹包...