今天是陰歷七月初五,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)分別代表每個西瓜的重量輸出輸出分成兩堆后的質量差樣例輸入55 8 13 27 14
樣例輸出3
#include <stdio.h>#include <math.h>int a[21],sum,all,n,i,j,min;void dfs(int star){ if(star==n) return ; if(fabs(all-sum*2)<min)// fabs(all-sum*2)=值為(大的一堆西瓜)-(小的一堆西瓜) min=fabs(all-sum*2); for(int j=star;j<n;j++) { sum+=a[j]; dfs(j+1); sum-=a[j]; }}int main(){ while(scanf("%d",&n)!=EOF) { all=0; for(i=0;i<n;i++) scanf("%d",&a[i]),all+=a[i]; min=n*10001; dfs(0); PRintf("%d/n",min); }}
新聞熱點
疑難解答