问题标题:
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时,第一堆石头的分法
查看更多
其它推荐
热门其它推荐