HDU 1114 揹包問題

2021-06-25 10:14:08 字數 737 閱讀 6036

題意就是:給你一定的空間,一定種類的硬幣,每種硬幣可以重複使用多次,讓我們計算消耗這麼多的空間的最小質量

dp[i+1][j]表示的就是從前i種硬幣中挑選質量小於j的最小價值

轉移方程:

dp[i+1][j] = min(dp[i][j],dp[i+1][j-w[i]]+v[i])//選取第i個

#include #include #include #define max_n 505

#define max_w 10005

#define inf 100000000

using namespace std;

//dp[i+1][j]表示從前i種硬幣中挑選質量小於j的最小價值

int dp[max_n][max_w];

int n;

int w;

int v[max_n];

int w[max_n];

int t,k;

int main()

void solve();

solve();

}}void solve()

}//dp[i+1][j]表示從前i種硬幣中挑選質量小於j的最小價值

//初值設定***** 將dp[0][0]設為0;

dp[0][0]=0;

for(int i=0;ielse}}

if(dp[n][w]!=inf)

else

}

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