HDU 3591 多重揹包

2022-08-23 17:51:08 字數 1287 閱讀 4925

題目:the trouble of xiaoqian

題意:有n種coin,給出每種coin的價值vi,和小強擁有的個數ci,小強去購物,要付m元,求小強和店員間交換貨幣時的最小個數貨幣,即小強付出coin個數加上店員找回coin個數。

解題思路:

揹包題,先用二進位制思想把coin合併成和種不同價值的貨幣,再進行01揹包。

view code

1 #include 

2 #include

3 #include

4 #include

5 #include

6 #include

7 #include 89

using

namespace std;

10const

int maxn = 100 + 10;

11const

int inf = 0x3f7f7f7f;

12int v[maxn];

13int c[maxn];

1415

struct tcoin

16 coin[maxn * maxn * maxn];

1920

int dp[20000 + 10];

21int main()

22 42 n >>= 1;

43if(n < c[i])

44

49 }

50for(int i = 1; i <= 20000; ++i)

51 dp[i] = inf;

52 dp[0] = 0;

53for(int i = 1; i < end; ++i)

54

60 }

61int ans = inf;

62for(int i = t; i <= 20000; ++i)

63if(dp[i] + dp[i - t] < ans)

64 ans = dp[i] + dp[i - t];

65if(ans == inf)

66 printf("

-1\n

");67

else

68 printf("

%d\n

", ans);

69 }

70return

0;71 }

HDU 3591 多重揹包

題意大概 小錢要買價值為t 的物品 他有n種不同數量的硬幣,求在此次交易所需花費數量最少的硬幣數 付款 售貨員找回的 分析 對顧客用多重揹包,對售貨員用完全揹包。此時揹包中的容量為n,價值為1,花費為硬幣的價值。因為輸出 1時,也要輸出case 哇了好多 include include includ...

HDU 3732(01揹包轉多重揹包)

這道題很有意思,n,c的資料量達到10000,如果用普通的01揹包來做絕對會超時,注意到v和c只有0 10的範圍,這說明有大量的v,c是重複的,相同的v,c的單詞是等價的,這樣就可以轉化為多重揹包來做。不過普通的多重揹包又可能會超時,於是我們採取二進位制優化的方式來優化成01揹包問題。從01揹包到多...

HDU 1059 多重揹包

個人覺得,這個可以作為多重揹包的模板使用,其中包括了簡單的0 1揹包和完全揹包,分清楚它們三個的區別。include include define n 60005 define max a,b a b?a b int c n void complete int cost,int weight,int...