今天是陰曆七月初五,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動態規劃演算法,剛開始想使用貪心演算法,首先進行預排序,這樣後面的情況分類會聽複雜的。
動態規劃遞迴函式: dp
[i]=
min(
dp[i
],dp
[i−a
[i]]
+a[i
])這樣選擇出來的將會是最接近sum/2的。
#include
#define max(a,b) a>b?a:b
int v,ans,n,w[21],sum[21];
void dfs(int i,int cnt)
if(ans == v || cnt+sum[i] <= ans) //cut
return ;
if(cnt+w[i] <= v)
dfs(i-1,cnt+w[i]);
dfs(i-1,cnt);
}int main()
v = sum[n]/2;
dfs(n,0);
printf("%d\n",sum[n]-2*ans);
}return
0;}
由源**可知,有兩層迴圈,故演算法時間複雜度為o(n * sum)。 nyoj 325 zb的生日(簡單dp)
時間限制 3000 ms 記憶體限制 65535 kb 難度 2 描述 今天是陰曆七月初五,acm隊員zb的生日。zb正在和c小加 never在武漢集訓。他想給這兩位兄弟買點什麼慶祝生日,經過調查,zb發現c小加和never都很喜歡吃西瓜,而且一吃就是一堆的那種,zb立刻下定決心買了一堆西瓜。當他準...
南理oj 325 zb的生日(dfs)
時間限制 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的時候,遇到了乙個難題...