簡單揹包 硬幣分堆

2021-08-11 21:27:25 字數 453 閱讀 9994

在論壇上看見的乙個題,花時間想了下,給出乙個大致的思路,記錄在這裡,以便以後檢視

題目:給出一堆硬幣,將其分為兩堆,使得這兩堆的差值盡量小

1.要使得差值盡量小,等同於尋找出乙個集合,它的和盡量靠近硬幣和sum/2

2.揹包即可

行--每一枚硬幣的選取

列--所選硬幣的和的最優值

偽**如下

sum_of_all_cions

half = sum_ofall_cions / 2;

memset(sum, false, sizeof(sum));

for i: 1 to coins

for j: half to 0

if sum[j] != 0

sum[j + coins_num] = true;

find the one which is true and nearest to half

揹包問題,硬幣問題

至少有4種揹包問題 1 01揹包 2 部分揹包 3 完全揹包 4 多重揹包。只有部分揹包是個貪心問題,其他的都是以01揹包為基礎的動歸問題。部分揹包問題 把物品按價值密度從大到小排序 w i v i 然後從第一種物品開始,盡可能多拿當前物品,如果當前物品的量小於揹包剩餘容量,拿完,指標推到下一種物品...

多重揹包問題 硬幣

給定n種硬幣,其中第 i 種硬幣的面值為ai,共有ci個。從中選出若干個硬幣,把面值相加,若結果為s,則稱 面值s能被拼成 求1 m之間能被拼成的面值有多少個。輸入格式 輸入包含多組測試用例。每組測試用例第一行包含兩個整數n和m。第二行包含2n個整數,分別表示a1,a2,an和c1,c2,cn。當輸...

硬幣思考多重揹包

給定n種硬幣,其中第 i 種硬幣的面值為ai,共有ci個。從中選出若干個硬幣,把面值相加,若結果為s,則稱 面值s能被拼成 求1 m之間能被拼成的面值有多少個。輸入包含多組測試用例。每組測試用例第一行包含兩個整數n和m。第二行包含2n個整數,分別表示a1,a2,an和c1,c2,cn。當輸入用例n ...