【二维费用的01背包 HDU3496 HDU2184】
HDU3496? ??
已空間優(yōu)化
? ? 疑惑點(diǎn)在 dp[時(shí)間][看電影數(shù)量]的初始化問題上面
? ? dp[0][0]=0。。。。是吧
? ? dp[0][i]=-inf,,,,,,,這個(gè)-inf一定要足夠大,題目中的數(shù)據(jù)是輸出的最大價(jià)值是<2^31 LL 在dp[0][i]更新的時(shí)候,最后是dp[0][i]+總和val,那這兒的-inf肯定是要足夠足夠大 最后才保證dp[0][i]在更新的時(shí)候,選取最大值時(shí)才取不到這個(gè)不合理的值
HDU2184
看出來是一道二維01背包問題
可是怎么確定背包的容量是多少呢?
wa證明我的二維01背包思路是錯(cuò)誤姿勢
自己寫不出來二維01背包實(shí)現(xiàn)的,看了網(wǎng)上的題解都是對滾動(dòng)數(shù)組進(jìn)行分析加上對背包容量的固定偏移量來實(shí)現(xiàn)好菜,
滾動(dòng)數(shù)組的正序及逆序:
深入一下滾動(dòng)數(shù)組吧,可以把樣例中的負(fù)值全部都轉(zhuǎn)化為正直,然后用畫表格的方式走一遍滾動(dòng)數(shù)組在實(shí)現(xiàn)的時(shí)候是怎么樣把當(dāng)前第i件物品更新到dp里面的
(手動(dòng)實(shí)現(xiàn))這時(shí)候每個(gè)背包的容量下對應(yīng)的物品都是放入一次的(空間優(yōu)化的逆序放入過程),可是存在負(fù)值的時(shí)候就對應(yīng)的不同種容量的背包狀態(tài)是對應(yīng)得一件物品得多件(自然就不是01背包了)
然后就有了題解中大神理解得對占用負(fù)的容量的 一個(gè)正序更新dp數(shù)組過程(也是自己手動(dòng)模擬過程,我模擬了一遍)
沒有給出背包容量轉(zhuǎn)化為用一定的偏移量來代替沒有給出的容量:
因?yàn)閿?shù)據(jù)最小負(fù)值為-1e5 最大值1e5,那么dp更新范圍在2e5之間,所以可以用2e5代表最大的容量,容量最小的基數(shù)為1e5,避免出現(xiàn)-1e5的數(shù)據(jù)使數(shù)組訪問越界
(原先寫得初始化思路:題目使容量盡量大,所以初始化為-inf d[1e5]就代表了01原型背包中的dp[0],((感覺是錯(cuò)誤得因?yàn)?#xff0c;這道題本身就是含有負(fù)值,搞為0得話,就會(huì)導(dǎo)致含有一個(gè)負(fù)值很大得時(shí)候他永遠(yuǎn)不會(huì)被選中
((感覺是這樣(⊙﹏⊙)
再有的細(xì)節(jié)就是對于兩個(gè)數(shù)據(jù)都是<0肯定不會(huì)選中,所以可以直接跳過。
參考
?
總結(jié)
以上是生活随笔為你收集整理的【二维费用的01背包 HDU3496 HDU2184】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【HDU1203 HDU2955 01
- 下一篇: 【常规的01背包 POJ3624 UVA