描述最開始尋思著用貪心的思想來解決,將重量按照順序從大到小排序,把每一件物品放入兩堆中的某乙個,使得重量差最小。使用區域性最優,達到全域性最優的效果。然而,貪心法在這裡是不起作用的,會存在錯解。今天是陰曆七月初五,acm隊員zb的生日。zb正在和c小加、never在武漢集訓。他想給這兩位兄弟買點什麼慶祝生日,經過調查,zb發現c小加和never都很喜歡吃西瓜,而且一吃就是一堆的那種,zb立刻下定決心買了一堆西瓜。當他準備把西瓜送給c小加和never的時候,遇到了乙個難題,never和c小加不在一塊住,只能把西瓜分成兩堆給他們,為了對每個人都公平,他想讓兩堆的重量之差最小。每個西瓜的重量已知,你能幫幫他麼?
輸入 多組測試資料(<=1500)。資料以eof結尾 第一行輸入西瓜數量n (1 ≤ n ≤ 20) 第二行有n個數,w1, …, wn
(1 ≤ wi ≤ 10000)分別代表每個西瓜的重量 輸出 輸出分成兩堆後的質量差
樣例輸入
5 5 8 13 27 14
樣例輸出
3
目前有乙個想法,有沒有可能進行數學建模後,運用凸函式理論來證明貪心演算法不正確的情形?先mark乙個,有進展再更。
下面給出兩種正確解法。
其實就是簡單的暴力列舉法,把所有可能性都找出來,然後求得差值最小的那種情況。
對於列舉,要考慮到的就是每件物品只有兩種狀態,要麼裝入揹包,要麼不裝入揹包。那麼,進行遞迴搜尋時,每一層就只考慮這兩種狀態。詳見**。
#include#includeint w[22],sum=0,n=0,minmize=10000,temp;
int dfs(int cur,int total)
int main()
int main()
}temp=(sum-weight[temp])-weight[temp];
printf("%d\n",temp);
}return 0;
}
動態規劃 01揹包
最優二叉查詢樹.cpp 定義控制台應用程式的入口點。01揹包問題。include stdafx.h include include define n 3 the number of real node define m 10 using namespace std int tmain int arg...
01揹包動態規劃
0 1揹包 問題描述 乙個旅行者有乙個最多能用 m公斤的揹包,現在有 n件物品,它們的重量 分別是w1,w2 wn,它們的價值分別為 c1,c2,cn.若每種物品只有一 件求旅行者能獲得最大總價值。輸入格式 w 第一行 兩個整數,m 揹包容量,m 200 和n 物品數量,n 30 w第2.n 1 行...
0 1揹包(動態規劃)
題意 有n件物品和乙個容量為v的揹包。第i件物品的體積是c i 價值是w i 求解將哪些物品裝入揹包可使價值總和最大。基本思路 這是最基礎的揹包問題,特點是 每種物品僅有一件,可以選擇放或不放。用子問題定義狀態 即f i v 表示前i件物品恰放入乙個容量為v的揹包可以獲得的最大價值。則其狀態轉移方程...