早教吧作业答案频道 -->其他-->
pascal石子合并:有n堆石头质量分别为W1,W2,……,Wn(W≤100000).现在需要你将石头合并为两部分,使有n堆石头质量分别为W1,W2,……,Wn(W≤100000).现在需要你将石头合并为两部分,使两部分的质量
题目详情
pascal 石子合并:有n堆石头质量分别为W1,W2,……,Wn(W≤100 000).现在需要你将石头合并为两部分,使
有n堆石头质量分别为W1,W2,……,Wn(W≤100 000).现在需要你将石头合并为两部分,使两部分的质量之和最接近.
代码如下:
var ans,sum,i,k,n:longint;
w:array[0..20]of longint;
function min(a,b:longint):longint;
begin
if a>b then exit(b) else exit(a);
end;
procedure dfs(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);
for i:=1 to n do
begin
read(w[i]);
inc(sum,w[i]);
end;
dfs(1,0);
writeln(ans);
end.
dfs(1,0)
为什么初始化是1和0?
k和tot 又是什么?
求大牛详解RP+++
有n堆石头质量分别为W1,W2,……,Wn(W≤100 000).现在需要你将石头合并为两部分,使两部分的质量之和最接近.
代码如下:
var ans,sum,i,k,n:longint;
w:array[0..20]of longint;
function min(a,b:longint):longint;
begin
if a>b then exit(b) else exit(a);
end;
procedure dfs(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);
for i:=1 to n do
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时,第一堆石头的分法
dfs(1,0)表示搜索当分好的第一部分石头质量为0时,第一堆石头的分法
看了pascal石子合并:有n堆石...的网友还看了以下:
matlab 矩阵矩阵元素替换有一行矩阵w=[1,0,1,1...,0],里面有n个1元素,其他元 2020-05-16 …
求助MATLAB符号计算:%声明符号变量syms c w t b a D n T v Q x y; 2020-05-16 …
设w是1的n次根,w不等于1,求证w满足的方程1+z+z^2+z^3+...+z^n-1=0.w是 2020-06-22 …
在水泥混凝土组成材料用量比例表示时,如果采用1份水泥、4份石子、2份砂,水灰比为05,则其配合比应 2020-07-30 …
有关复数的题目一.巳知1+x+x^2=0,求证:x^1979+x^1989+x^1999=0二.设 2020-08-01 …
已知复数Z和W满足zw+2iw+1=0且W'-z=2i其中W和W'为共轭复数求Z和w已知复数z=( 2020-08-02 …
1.已知inti=0,x=1,y=0;在下列选项使i的值变成1的语句是().(A)if(x&&y)i 2020-11-01 …
知15CrMo钢中,w(c)=0.18%、w(Mn)=0.6%、w(Cr)=1.0%、w(Mo)=0 2020-12-03 …
已知w为w^5=1的非零实根,则w(w+1)(w^2+1)=?不好意思,不是实根,我打错了.3楼,为 2020-12-07 …
pascal石子合并:有n堆石头质量分别为W1,W2,……,Wn(W≤100000).现在需要你将石 2021-01-13 …