給你乙個空的存錢罐的重量,和乙個裝了一些錢後的存錢罐的重量,然後給你n
個硬幣的價值p
和重量w
,保證存錢罐中的硬幣的種類都在這n
種硬幣中。現在讓我們求在給定重量的情況下,存錢罐內硬幣的金額最少是多少。
因為每一種硬幣的使用數目沒有限制,所以我們可以使用完全揹包來進行解決。
我們定義dp[i][j]
的含義為在僅可以使用前i
種硬幣,並且正好裝滿揹包容量為j
的前提下,硬幣的最小金額。
這裡我們需要初始化一些初始值,dp[i][0] = 0
這個狀態表示在揹包容量為0
的前提下,無論使用前多少種硬幣,我們都不能放硬幣,因而總的金額為0
。其他的狀態dp[i][j] = inf
,因為這裡的值我們還不知道,並且我們要求最小值,所以我們給不知道的狀態賦值乙個很大的數,這樣在進行狀態遞推的時候就可以使用min()
這個函式來進行了。
#include#include#include#include#include#include#include#include#include#include#includetypedef long long ll;
using namespace std;
const double esp=1e-6;
const int inf=0x3f3f3f3f;
const int maxn=500+7;
const int maxv=1e4+7;
int w[maxn], val[maxn];
int dp[maxv];
int e, f, n, t;
int main()
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 ...