pascal石子归并 石子归并一:给出n堆石子的重量W1,W2.WN,要求你合并其中的任意两堆或者n堆(n>=2),求出
来源:学生作业帮 编辑:大师作文网作业帮 分类:综合作业 时间:2024/11/13 09:50:55
pascal石子归并
石子归并一:给出n堆石子的重量W1,W2.WN,要求你合并其中的任意两堆或者n堆(n>=2),求出所有经过合并能够得到的重量值.
程序
Procedure DP_stone1(n:longint);
var I,j,total:longint;
begin
f[0]:=true;
total:=sum;{所有石子的总和}
for j:=0 to n do
for i:=total-w[i] downto 0 do
if f[i]=true then f[i+w[j]]:=true
end;
我想问一下倒数第二行的f【i】电脑怎么知道是不是正确的,他不是只给了f0的和f(total)的值吗
石子归并一:给出n堆石子的重量W1,W2.WN,要求你合并其中的任意两堆或者n堆(n>=2),求出所有经过合并能够得到的重量值.
程序
Procedure DP_stone1(n:longint);
var I,j,total:longint;
begin
f[0]:=true;
total:=sum;{所有石子的总和}
for j:=0 to n do
for i:=total-w[i] downto 0 do
if f[i]=true then f[i+w[j]]:=true
end;
我想问一下倒数第二行的f【i】电脑怎么知道是不是正确的,他不是只给了f0的和f(total)的值吗
这里用倒推保证是正确的.、
for j:=0 to n do
for i:=total-w[i] downto 0 do
if f[i]=true then f[i+w[j]]:=true
如果写
for j:=0 to n do
for i:=0 to total-w[i] do
if f[i]=true then f[i+w[j]]:=true
就会出现f[i+w[i]]因为f[i]是true,再次循环外层的j时,f[i+w[i]+w[i]]=true的情况(这就是完全背包了,这里不讨论)
至于楼主的问题.摆脱,外层还有个表示j循环呢、.j=k时会求出前k个石子可以合并出哪些
for j:=0 to n do
for i:=total-w[i] downto 0 do
if f[i]=true then f[i+w[j]]:=true
如果写
for j:=0 to n do
for i:=0 to total-w[i] do
if f[i]=true then f[i+w[j]]:=true
就会出现f[i+w[i]]因为f[i]是true,再次循环外层的j时,f[i+w[i]+w[i]]=true的情况(这就是完全背包了,这里不讨论)
至于楼主的问题.摆脱,外层还有个表示j循环呢、.j=k时会求出前k个石子可以合并出哪些
pascal石子归并 石子归并一:给出n堆石子的重量W1,W2.WN,要求你合并其中的任意两堆或者n堆(n>=2),求出
两堆石子,第一堆是第二堆的56
孩子把石子堆成许多堆,发现石子堆中任意选六堆其中至少有两堆石子数之差是5的倍数,对么?为什么?
一些孩子在沙滩上玩耍,他们把石子堆成许多堆,其中有一个孩子发现,从石子堆中任意选出五堆数量不同的石子,其实至少有两堆石子
建筑工地有两堆石子,第一堆重300吨,第二堆比第一堆的2倍少40吨,两堆石子共重多少吨?
一些孩子在沙滩上玩耍,他们把石子堆成许多堆,其中一个孩子发现从石子堆中任意选出6堆,其中至少有两堆石子数的差是5的倍数,
1.一些孩子在沙滩上玩耍,他们把石子堆成许多堆.其中有一个孩子发现从石子堆中任意选出6堆,其中至少有两堆石子数之差是5的
一些孩子在沙滩上玩耍,他们把石子堆成许多堆,其中有一个孩子发现,从石子堆中任意选出五堆,其中至少有两堆石子数之差是4的倍
一些孩子在河滩上玩耍,他们把石子堆成许多堆,其中有一个孩子发现从石子堆中任意选出六堆,其中至少有两堆石子数之差是5的倍数
一些孩子在沙滩上玩耍,他们把石子堆成数目不提的许多堆,其中有一个孩子发现从石子堆中任意选出六堆,其
一些孩子在沙滩上玩耍,他们把石子堆成许多堆,其中有一个孩子发现,从石子堆中任意选出五堆,其中
我想问你个问题,一些孩子在沙滩上玩耍,他们把石子堆成许多堆,没堆石子数各不相同,其中有一个孩子发现