pascal石子归并 石子归并一:给出n堆石子的重量W1,W2.WN,要求你合并其中的任意两堆或者n堆(n>=2),求出所有经过合并能够得到的重量值.程序Procedure DP_stone1(n:longint);var I,j,total:longint;beginf[0]:=tru

来源:学生作业帮助网 编辑:作业帮 时间:2024/03/29 16:53:30
pascal石子归并 石子归并一:给出n堆石子的重量W1,W2.WN,要求你合并其中的任意两堆或者n堆(n>=2),求出所有经过合并能够得到的重量值.程序Procedure DP_stone1(n:longint);var I,j,total:longint;beginf[0]:=tru

pascal石子归并 石子归并一:给出n堆石子的重量W1,W2.WN,要求你合并其中的任意两堆或者n堆(n>=2),求出所有经过合并能够得到的重量值.程序Procedure DP_stone1(n:longint);var I,j,total:longint;beginf[0]:=tru
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)的值吗

pascal石子归并 石子归并一:给出n堆石子的重量W1,W2.WN,要求你合并其中的任意两堆或者n堆(n>=2),求出所有经过合并能够得到的重量值.程序Procedure DP_stone1(n:longint);var I,j,total:longint;beginf[0]:=tru
这里用倒推保证是正确的.、
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),求出所有经过合并能够得到的重量值.程序Procedure DP_stone1(n:longint);var I,j,total:longint;beginf[0]:=tru pascal 石子归并问题有n堆石子排成一列,每堆石子有一个重量w[i],每次合并可以合并相邻的两堆石子,一次合并的代价为两堆石子的重量和w[i]+w[i+1].问安排怎样的合并顺序,能够使得总合并代价达 求石子归并(直线型)样例分析?输入 7 13 7 8 16 21 4 18 输出 239(pascal)描述 Description在一个操场上一排地摆放着N堆石子.现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆石子合并成 归并排序中,归并的趟数是多少.求计算方法.log(n) 归并排序中,归并的趟数是多少.求计算方法.log(n) 给出一组关键字29、18、25、47、58、12、51、10,进行归并排序,每归并一次书写一个次序 石子合并(pascal)【石子合并】在一个圆形操场的四周摆放着n 堆石子.现要将石子有次序地合并成一堆.规定每次只能选相邻的2 堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的得分. 用C随机函数生成n个随机数,然后用归并法排序 一吨石子是多少立方 一立方石子多少公斤 一立方石子多少吨 石子一立方是多少吨 一立方米石子有多重 一箱石子的故事 这是啥石子... 一立方石子等于多少公斤 一吨石子等于多少立方 一立方石子等于多少吨