題意:
有n個西瓜(n<=20),每個西瓜有一定的重量(w<=10000),將它們分成兩堆,問如何使兩堆重量之差最小。
解題思路:
還是看成容量為 sum/2 的揹包問題,用搜尋列舉所有情況,使揹包中的重量盡量大。如此可得到最優解。
搜尋的效率取決於剪枝。而剪枝一般有兩種,可行性剪枝與最優性剪枝。
可行性:如果將物品裝入揹包後,費用超過容量,則不將它放入揹包。
最優性:1、如果揹包已經裝滿,則不再考慮其他情況。
2、如果揹包中已有物品加上現有可選物品的總重量都不大於已知的最優解,則剪枝。
12 #include 3
#define max(a,b) a>b?a:b
4int v,ans,n,w[21],sum[21];5
void dfs(int i,int
cnt)612
if(ans == v || cnt+sum[i] <= ans) //
cut13
return;14
if(cnt+w[i] <=v)
15 dfs(i-1,cnt+w[i]);
16 dfs(i-1
,cnt);17}
18int
main()
1928 v = sum[n]/2
;29 dfs(n,0
);30 printf("
%d\n
",sum[n]-2*ans);31}
32return0;
33 }
nyoj 325 zb的生日(簡單dp)
時間限制 3000 ms 記憶體限制 65535 kb 難度 2 描述 今天是陰曆七月初五,acm隊員zb的生日。zb正在和c小加 never在武漢集訓。他想給這兩位兄弟買點什麼慶祝生日,經過調查,zb發現c小加和never都很喜歡吃西瓜,而且一吃就是一堆的那種,zb立刻下定決心買了一堆西瓜。當他準...
nyoj 325 zb的生日(01揹包)
題目鏈結 題目描述 今天是陰曆七月初五,acm隊員zb的生日。zb正在和c小加 never在武漢集訓。他想給這兩位兄弟買點什麼慶祝生日,經過調查,zb發現c小加和never都很喜歡吃西瓜,而且一吃就是一堆的那種,zb立刻下定決心買了一堆西瓜。當他準備把西瓜送給c小加和never的時候,遇到了乙個難題...
NYOJ 325 zb的生日(01揹包模板)
時間限制 3000 ms 記憶體限制 65535 kb 難度 2 描述 今天是陰曆七月初五,acm隊員zb的生日。zb正在和c小加 never在武漢集訓。他想給這兩位兄弟買點什麼慶祝生日,經過調查,zb發現c小加和never都很喜歡吃西瓜,而且一吃就是一堆的那種,zb立刻下定決心買了一堆西瓜。當他準...