1. 程式人生 > 實用技巧 >Piggy-Bank(完全揹包)

Piggy-Bank(完全揹包)

HDU - 1114

題目翻譯:

在acm能夠做任何事情之前, 必須編制預算並獲得必要的財政支援。這一行動的主要收入來自IBM。這個想法其實很簡單,每當一些會員有一點小錢時,他就會把所有的硬幣都扔到小豬存錢罐裡。這個過程是不可逆轉的, 除非打破豬,否則硬幣不能拿出來。過了足夠長的時間, 存錢罐裡應該有足夠的現金來支付所有需要支付的費用。

但存錢罐存在很大問題:不可能確定裡面有多少錢。所以我們可能敲破豬才發現沒有足夠的錢。顯然, 我們要避免這種不愉快的情況,唯一的可能是稱重豬,並試圖猜測裡面有多少枚硬幣。假設我們能夠準確地確定豬的重量, 而且我們知道給定貨幣的所有硬幣的重量。然後在存錢罐裡有一些最低數量的錢, 我們可以保證。你的任務是找出這個最壞的情況, 並確定在存錢罐內的最低現金金額。

大致意思:給你空豬和裝滿硬幣的豬的重量,然後再給你一些硬幣數量和它的質量,讓你去算實現的最低金額的硬幣。注意這道題是必須要剛好裝滿的,如果裝不滿就不行。

思路:完全揹包,一開始將dp[0]賦值為0,其他dp的值賦為INF(0x3f3f3f3f),dp[j]=min(dp[j],dp[j-c[i]]+w[i])(這個轉移方程具體怎麼來的,看https://www.cnblogs.com/jbelial/articles/2116074.html),最後去看dp[豬的質量差]是否等於INF,如果等於,那麼沒有剛好裝滿,輸出題目所給的字串,如果不等,就輸出dp[豬的質量差]。

具體程式碼如下:

 1 #include<iostream>
 2
#include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 const int maxn = 505; 7 const int minn = 10005; 8 const int INF = 0x3f3f3f3f; 9 int c[maxn]; 10 int w[maxn]; 11 int dp[minn]; 12 int main(){ 13 int t; 14 scanf("%d", &t); 15 while(t--){
16 int E; 17 int F; 18 memset(dp, INF, sizeof dp); 19 dp[0] = 0; 20 scanf("%d%d", &E, &F); 21 int n; 22 scanf("%d", &n); 23 for(int i=1;i<=n;i++){ 24 scanf("%d", &w[i]); 25 scanf("%d", &c[i]); 26 } 27 int v = F - E; 28 for(int i=1;i<=n;i++){ 29 for (int j = c[i]; j <= v;j++){ 30 dp[j] = min(dp[j] , dp[j - c[i]] + w[i]); 31 } 32 } 33 if(dp[v]!=INF) 34 cout << "The minimum amount of money in the piggy-bank is " << dp[v] <<"."<< endl; 35 else { 36 cout << "This is impossible." << endl; 37 } 38 } 39 }

最後祝各位大佬身體健康,ac愉快

 1 /**********/**********/**********//**********//**********//**********//**********/  
 2 <!--
 3                        ::
 4                       :;J7, :,                        ::;7:
 5                       ,ivYi, ,                       ;LLLFS:
 6                       :iv7Yi                       :7ri;j5PL
 7                      ,:ivYLvr                    ,ivrrirrY2X,
 8                      :;[email protected]:                :ivu@kexianli.
 9                     :iL7::,:::iiirii:ii;::::,,irvF7rvvLujL7ur
10                    ri::,:,::i:iiiiiii:i:irrv177JX7rYXqZEkvv17
11                 ;i:, , ::::iirrririi:i:::iiir2XXvii;L8OGJr71i
12               :,, ,,:   ,::[email protected]:i:::j1jri7ZBOS7ivv,
13                  ,::,    ::rv77iiiriii:iii:i::,[email protected]
14              ,,      ,, ,:ir7ir::,:::i;ir:::i:i::rSGGYri712:
15            :::  ,v7r:: ::rrv77:, ,, ,:i7rrii:::::, ir7ri7Lri
16           ,     2OBBOi,iiir;r::        ,irriiii::,, ,iv7Luur:
17         ,,     i78MBBi,:,:::,:,  :7FSL: ,iriii:::i::,,:rLqXv::
18         :      iuMMP: :,:::,:ii;2GY7OBB0viiii:i:iii:i:::iJqL;::
19        ,     ::::i   ,,,,, ::LuBBu BBBBBErii:i:i:i:i:i:i:r77ii
20       ,       :       , ,,:::rruBZ1MBBqi, :,,,:::,::::::iiriri:
21      ,               ,,,,::::i:  @arqiao.       ,:,, ,:::ii;i7:
22     :,       rjujLYLi   ,,:::::,:::::::::,,   ,:i,:,,,,,::i:iii
23     ::      BBBBBBBBB0,    ,,::: , ,:::::: ,      ,,,, ,,:::::::
24     i,  ,  ,8BMMBBBBBBi     ,,:,,     ,,, , ,   , , , :,::ii::i::
25     :      iZMOMOMBBM2::::::::::,,,,     ,,,,,,:,,,::::i:irr:i:::,
26     i   ,,:;u0MBMOG1L:::i::::::  ,,,::,   ,,, ::::::i:i:iirii:i:i:
27     :    ,iuUuuXUkFu7i:iii:i:::, :,:,: ::::::::i:i:::::iirr7iiri::
28     :     :[email protected]:::::, ,:ii:::::::i:::::i::,::::iirrriiiri::,
29      :      5BMBBBBBBSr:,::rv2kuii:::iii::,:i:,, , ,,:,:i@petermu.,
30           , :r50EZ8MBBBBGOBBBZP7::::i::,:::::,: :,:,::i;rrririiii::
31               :jujYY7LS0ujJL7r::,::i::,::::::::::::::iirirrrrrrr:ii:
32            ,:  :@kevensun.:,:,,,::::i:i:::::,,::::::iir;ii;7v77;ii;i,
33            ,,,     ,,:,::::::i:iiiii:i::::,, ::::[email protected];7:i,
34         , , ,,,:,,::::::::iiiiiiiiii:,:,:::::::::iiir;ri7vL77rrirri::
35          :,, , ::::::::i:::i:::i:i::,,,,,:,::i:i:::iir;@Secbone.ii:::
36 
37 --
38 
39 
40 /**
View Code