1. 程式人生 > >動態規劃-01背包

動態規劃-01背包

-1 體積 targe dynamic ora 。。 sdn aik .cn

先認錯,學長們很早之前就講過了,然而我現在才來寫。。。

01背包

01背包是在M件物品取出若幹件放在空間為W的背包裏,每件物品的體積為W1,W2……Wn,與之相對應的價值為P1,P2……Pn。

01背包題目的雛形是: 有N件物品和一個容量為V的背包。第i件物品的費用是c[i],價值是w[i]。求解將哪些物品裝入背包可使價值總和最大。 從這個題目中可以看出,01背包的特點就是:每種物品僅有一件,可以選擇放或不放。 其狀態轉移方程是: f[i][v]=max{f[i-1][v],f[i-1][v-c[i]]+w[i]} 對於這個方程其實並不難理解,方程之中,現在需要放置的是第i件物品,這件物品的體積是c[i],價值是w[i],因此f[i-1][v]代表的就是不將這件物品放入背包,而f[i-1][v-c[i]]+w[i]則是代表將第i件放入背包之後的總價值,比較兩者的價值,得出最大的價值存入現在的背包之中。 以上來自度娘。傳送門:https://baike.baidu.com 自己看了好幾篇博客,然後感覺,說這麽多不如直接手寫個表來的實際, 傳送門:http://blog.csdn.net/mu399/article/details/7722810 把這篇博客看完,那個表自己手寫填上差不多就理解了,然後就是填上表之後和代碼聯系在一起怎麽想啊,可能我太菜了,開始怎麽都不理解,我的智商可能離家出走了,
後來知道了。 對於背包問題,通常的處理方法是搜索。用遞歸來完成搜索。 用f[i,j]表示在前 i 件物品中選擇若幹件放在已用空間為 j 的背包裏所能獲得的最大價值, 所以關鍵代碼就是:
f[i, j] = max( f[ i-1 ][  j-W[ i ] ] + P[ i ] , f[ i-1 ][ j ] )//j >= W[ i ]

再來個博客就可以了,傳送門:http://www.cnblogs.com/Christal-R/p/Dynamic_programming.html

這麽多大佬寫的這麽好,看他們寫的真的很厲害啊?????

我這麽菜(?﹏?)

打擊!!_| ̄|○

加油。

動態規劃-01背包