完全揹包 HDOJ 1114 Piggy Bank

2021-07-26 11:16:42 字數 787 閱讀 7390

題目傳送門:

題目大意是給出乙個錢罐,錢罐中的錢有一定的重量,同時給出一些硬幣,這些硬幣有自己的重量和價值(每種硬幣有無限個),求錢罐中錢的最少價值。

狀態f[i][j] 表示前i件物品放入空間為j的揹包所能取得的最大價值。

狀態轉移方程:f[i][j] = max(f[i-1],[j-k*c[i]]+k*w[i]) (0≤k*c[i]≤j)

for (int i = 1; i <= n; ++i)

}}

for (int i = 1; i <= n; ++i)

}

與01揹包的優化**相比,完全揹包的差別僅僅是第二趟迴圈從逆序變為了正序,也就是從裝入i - 1件物品的狀態變為了當前狀態。

這道題在完全揹包的基礎上有了少許拓展,即要求揹包必須裝滿。

#include 

#define maxn 999999

using

namespace

std;

int main()

;/*因為必須裝滿,因此初始化時只有f[0]=0,其他置為正無窮,因為在沒有物品的情況下,任何空間大於0的揹包都是非法的(揹包沒有裝滿)*/

for (i=1;i<=final;i++)

for (i=1;i<=n;i++)

for (i=1;i<=n;i++) }}

if (dp[final] == maxn) else

}return

0;}

完全揹包 HDU 1114

今天看了看揹包九講的完全揹包。估計是因為只記住了方程,沒理解透的原因。照著寫,還是錯了 錯就錯在初始化的時候,我全部初始化為0了,然後用max 但是得不到答案。可是初始化出0位置以外,其他都為無窮大,取min,過了 額。去問問高手吧我。再研究了下,猛然回頭,發現,是求揹包裝滿的 最小價值 inclu...

hdu 1114 完全揹包)

思路 在揹包九講中有提到,如果是要恰好裝滿,那麼這兒dp的初始化時應將dp 0 0,由於這兒是求最小值,故應將dp 1 dp n 置為正無窮 若是求最大值,則置為負無窮 1 include2 const int n 550 3 const int inf 1000000000 4 using nam...

hdu1114 完全揹包

題意 給你乙個罐子的自身重量和它最大的承受重量,再給你n種面值的硬幣,接下來n行為每個硬幣的價值和重量,讓你求能恰好裝滿罐子的最小價值 如果沒辦法恰好裝滿則輸出this is impossible.明顯這是乙個多重揹包 我們知道完全揹包的模板 for i 1.n for v 0.v f v max ...