hdu1114 完全揹包

2021-10-23 14:41:23 字數 813 閱讀 5825

題意 : 給你乙個罐子的自身重量和它最大的承受重量,再給你n種面值的硬幣,接下來n行為每個硬幣的價值和重量,讓你求能恰好裝滿罐子的最小價值 如果沒辦法恰好裝滿則輸出this is impossible.

明顯這是乙個多重揹包 我們知道完全揹包的模板:

for i=

1..n

for v=

0..v

f[v]

=max

;

但是這道題還要精確得出是否裝滿 若用上邊的式子 無法判斷 所以 可以將dp陣列初始化為最大 每次更新時用min來更新 最後若dp[w]沒有被更新到 則證明無法精確裝滿

如果不能剛好裝滿的話dp[w-k*w[i]]是不存在的為其初始值inf。那麼dp[w]就永遠無法更新w

**:

#include

using

namespace std;

#define inf 999999

int t;

int dp[

1000001];

intmain()

for(

int i =

0; i < n; i++)}

if(dp[w]

== inf)

printf (

"this is impossible.\n");

else

cout <<

"the minimum amount of money in the piggy-bank is "

<<<

'.'<< endl;

}}

完全揹包 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...

HDU 1114 完全揹包

給你乙個空的存錢罐的重量,和乙個裝了一些錢後的存錢罐的重量,然後給你n個硬幣的價值p和重量w,保證存錢罐中的硬幣的種類都在這n種硬幣中。現在讓我們求在給定重量的情況下,存錢罐內硬幣的金額最少是多少。因為每一種硬幣的使用數目沒有限制,所以我們可以使用完全揹包來進行解決。我們定義dp i j 的含義為在...