HDU 1114
在 ACM 能夠開展之前,必須準(zhǔn)備預(yù)算,并獲得必要的財力支持。該活動的主要收入來自于 Irreversibly Bound Money (IBM)。思路很簡單。任何時候,某位 ACM 會員有少量的錢時,他將所有的硬幣投入到小豬儲錢罐中。這個過程不可逆,因為只有把小豬儲錢罐打碎才能取出硬幣。在足夠長的時間之后,小豬儲錢罐中有了足夠的現(xiàn)金,用于支付 ACM 活動所需的花費。
但是,小豬儲錢罐存在一個大的問題,即無法確定其中有多少錢。因此,我們可能在打碎小豬儲錢罐之后,發(fā)現(xiàn)里面的錢不夠。顯然,我們希望避免這種不愉快的情況。唯一的可能是,稱一下小豬儲錢罐的重量,并嘗試猜測里面的有多少硬幣。假定我們能夠精確判斷小豬儲錢罐的重量,并且我們也知道給定幣種的所有硬幣的重量。那么,我們可以保證小豬儲錢罐中最少有多少錢。
你的任務(wù)是找出最差的情形,即判斷小豬儲錢罐中的硬幣最少有多少錢。我們需要你的幫助。不能再貿(mào)然打碎小豬儲錢罐了!
輸入
輸入包含 T 組測試數(shù)據(jù)。輸入文件的第一行,給出了 T 的值。
對于每組測試數(shù)據(jù),第一行包含 E 和 F 兩個整數(shù),它們表示空的小豬儲錢罐的重量,以及裝有硬幣的小豬儲錢罐的重量。兩個重量的計量單位都是 g (克)。小豬儲錢罐的重量不會超過 10 kg (千克),即 1 <= E <= F <= 10000 。每組測試數(shù)據(jù)的第二行,有一個整數(shù) N (1 <= N <= 500),提供了給定幣種的不同硬幣有多少種。接下來的 N 行,每行指定一種硬幣類型,每行包含兩個整數(shù) P 和 W (1 <= P <= 50000,1 <= W <=10000)。P 是硬幣的金額 (貨幣計量單位);W 是它的重量,以 g (克) 為計量單位。
輸出
對于每組測試數(shù)據(jù),打印一行輸出。每行必須包含句子 “The minimum amount of money in the piggy-bank is X.” 其中,X 表示對于給定總重量的硬幣,所能得到的最少金額。如果無法恰好得到給定的重量,則打印一行 “This is impossible.” 。
示例輸入
3
10 110
2
1 1
30 50
10 110
2
1 1
50 30
1 6
2
10 3
20 4
示例輸出
The minimum amount of money in the piggy-bank is 60.
The minimum amount of money in the piggy-bank is 100.
This is impossible.
完全背包問題。
?
#include <bits/stdc++.h>#define M 100000 using namespace std; const int inf = 0x7fffffff;int main() {pair<int,int>arr[M];int f1[M];int t,e,f,n;cin>>t;while(t--){for(int i = 0; i < M; i++) f1[i] = inf;cin>>e>>f;int total = f-e;cin>>n;for(int i = 0; i < n; i++)cin>>arr[i].second>>arr[i].first;f1[0] = 0;for(int i = 0; i < n; i++)for(int j = arr[i].first; j <= total; j++)if(f1[j-arr[i].first] < inf)f1[j] = min(f1[j],f1[j-arr[i].first] + arr[i].second);if(f1[total] == inf) cout<<"This is impossible.\n";else cout<<"The minimum amount of money in the piggy-bank is "<<f1[total]<<".\n";}return 0; }?
轉(zhuǎn)載于:https://www.cnblogs.com/stul/p/10349068.html
總結(jié)
- 上一篇: Educational Codeforc
- 下一篇: 学术会议相关知识