问题标题:
pascal石子合并:有n堆石头质量分别为W1,W2,……,Wn(W≤100000).现在需要你将石头合并为两部分,使有n堆石头质量分别为W1,W2,……,Wn(W≤100000).现在需要你将石头合并为两部分,使两部分的质量
问题描述:
pascal石子合并:有n堆石头质量分别为W1,W2,……,Wn(W≤100000).现在需要你将石头合并为两部分,使
有n堆石头质量分别为W1,W2,……,Wn(W≤100000).现在需要你将石头合并为两部分,使两部分的质量之和最接近.
代码如下:
varans,sum,i,k,n:longint;
w:array[0..20]oflongint;
functionmin(a,b:longint):longint;
begin
ifa>bthenexit(b)elseexit(a);
end;
proceduredfs(k,tot:longint);
begin
if(tot*2>=sum)or(k>n)then
begin
ans:=min(ans,abs(sum-tot-tot));
exit;
end;
dfs(k+1,tot+w[k]);
dfs(k+1,tot);
end;
begin
ans:maxlongint;
sun:=0;
read(n);
fori:=1tondo
begin
read(w[i]);
inc(sum,w[i]);
end;
dfs(1,0);
writeln(ans);
end.
dfs(1,0)
为什么初始化是1和0?
k和tot又是什么?
求大牛详解RP+++
申洪回答:
k表示第k堆石头,tot表示分好的第一部分石头的质量
dfs(1,0)表示搜索当分好的第一部分石头质量为0时,第一堆石头的分法
查看更多