阿美籌辦ACM競賽(完全揹包問題,求最小值)

2021-09-19 05:54:06 字數 1788 閱讀 4473

若想順利舉辦 一場acm賽事,必須事先做好預算,並獲得必要的財力支援。阿美接受任務後,甚是苦惱。於是找阿亮商量如何籌錢。思考了片刻,阿亮給出了餿主意:我們可以學習道觀籌集香火錢的策略。我們製作乙個超級迷人的存錢罐,擺放在學校的核心位置。這樣,在任何時候,只要行者願意,他就可以將隨身攜帶的硬幣投入到存錢罐中。這個過程不可逆,因為只有把存錢罐打碎才能取出硬幣。相信在足夠長的時間之後,存錢罐中肯定有足夠的現金,用於支付 acm 活動所需的花費。

機靈的阿美反問道:存錢罐籌集acm經費存在乙個大問題呀,即無法隨時確定其中有多少錢。因此,我們有可能在打碎存錢罐之後,發現裡面的錢不夠。

阿亮說:我們可以通過稱重來避免這種不愉快的情況。也就是說:稱一下存錢罐的重量,並嘗試猜測裡面有多少硬幣。假定我們能夠精確判斷存錢罐的重量,並且我們也知道給定幣種的所有硬幣的重量。那麼,我們可以保證存錢罐中最少有多少錢。阿美拽著阿亮的衣角撒嬌說:亮哥,這個識別任務就交給您了,您真是我的麼麼噠。

輸入包含 t 組測試資料。輸入檔案的第一行,給出了 t 的值。

對於每組測試資料,第一行包含 e 和 f 兩個整數,它們表示空的存錢罐的重量,以及裝有硬幣的存錢罐的重量。兩個重量的計量單位都是 g (克)。存錢罐的重量不會超過 10 kg (千克),即 1 <= e <= f <= 10000 。每組測試資料的第二行,有乙個整數 n (1 <= n <= 500),提供了給定幣種的不同硬幣有多少種。接下來的 n 行,每行指定一種硬幣型別,每行包含兩個整數 p 和 w (1 <= p <= 50000,1 <= w <=10000)。p 是硬幣的金額 (貨幣計量單位);w 是它的重量,以 g (克) 為計量單位。

對於每組測試資料,列印一行輸出。每行必須包含句子 「the minimum amount of money in the piggy-bank is x.」 其中,x 表示對於給定總重量的硬幣,所能得到的最少金額。如果無法恰好得到給定的重量,則列印一行 「this is impossible.」 。

3

10 110

21 1

30 50

10 110

21 1

50 30

1 62

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.

完全揹包問題,不過求的是最小值。

關鍵的乙個步驟:dp[j]=min(dp[j],dp[j-wi[i]]+pi[i]);

剛開始一直不理解dp[j-wi[i]]這個表達的是什麼,後來經過除錯,理解了。通過dp[j]和dp[j-wi[i]]+pi[i]比較,取最小值存入,當前dp[j],已經被初始化為了10000000,dp[j-wi[i]]這個計算出的數,若是當前幣種重量的倍數,則已經存入值,就不是10000000了,dp[j-wi[i]]+pi[i]計算出的數就會比10000000小,然後存入當前的dp[j],否則,dp[j]還是10000000。

#include#includeusing namespace std;

int dp[10005];

int main()

dp[0]=0;

scanf("%d",&n);

for(i=0;ifor(i=0;i}

if(dp[weight]==10000000)

else

}return 0;

}

揹包問題(完全揹包)

1.矩陣鏈乘法 2.投資組合問題 3.完全揹包問題 4.01揹包問題 5.最長公共子串行 乙個揹包,可以放入n種物品,物品j的重量和價值分別為,如果揹包的最大重量限制是b,怎麼樣選擇放入揹包的物品以使得揹包的總價值最大?組合優化問題,設表示裝入揹包的第j個物品的數量,解可以表示為。那麼目標函式和約束...

完全揹包問題

這個是從ppt上弄過來的。完全揹包問題 有n種物品和乙個容量為v的揹包,每種物品都有無限件可用。放入第i種物品的耗費的空間是ci,得到的價值是wi。求解 將哪些物品裝入揹包,可使這些物品的耗費的空間總和不超過揹包容量,且價值總和最大 基本思路 這個問題非常類似於01揹包問題,所不同的是每種物品有無限...

完全揹包問題

設有n種物品,每種物品有乙個重量及乙個價值。但每種物品的數量是無限的,同時有乙個揹包,最大載重量為m,今從n種物品中選取若干件 用乙個物品可以多次選取 使其重量的和小於等於m,而價值的和為最大。輸入有多組資料,對於每組輸入資料第1行 兩個整數,m 揹包容量,m 200 和n 物品數量,n 30 第2...