題目:the trouble of xiaoqian
題意:有n種coin,給出每種coin的價值vi,和小強擁有的個數ci,小強去購物,要付m元,求小強和店員間交換貨幣時的最小個數貨幣,即小強付出coin個數加上店員找回coin個數。
解題思路:
揹包題,先用二進位制思想把coin合併成和種不同價值的貨幣,再進行01揹包。
view code
1 #include2 #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...