var
a:array[1..30] of integer;
n,k:integer;
procedure input;
var
f:text;
i:integer;
begin
assign(f,'copy.in');
reset(f);
readln(f,n,k);
for i:=1 to n do
read(f,a[i]);
close(f);
end;
procedure output;
var
f:text;
i:integer;
begin
for i:=1 to n do
write(a[i]:3);
readln;
end;
function done(n,k:integer):integer;
function side1(n:integer):integer;
var
i,t:integer;
begin
t:=0;
for i:=1 to n do
if a[i]>t then t:=a[i];
side1:=t;
end;
function side2(n:integer):integer;
var
i,s:integer;
begin
s:=0;
for i:=1 to n do
inc(s,a[i]);
side2:=s;
end;
function max(a,b:integer):integer;
begin
if a>b then max:=a
else max:=b;
end;
function sigema(b,c:integer):integer;
var
i,t:integer;
begin
t:=0;
for i:=b to c do
inc(t,a[i]);
sigema:=t;
end;
function digui(n,k:integer):integer;
var
i,x,t:integer;
begin
t:=maxint;
for i:=1 to n-k+1 do
begin
x:=max(done(n-i,k-1),sigema(n-i+1,n));
if x
end;
begin {main done}
if n=k
then done:=side1(n)
else if k=1
then done:=side2(n)
else done:=digui(n,k);
end;
begin {main}
input;
write(done(n,k));
output;
readln;
end.
症状:
输入
10 4
4 1 4 7 4 4 5 2 1 0
(既4人复制10本书)
输出0
还有一个非常恐怖的问题:
单步执行
无论是按F7还是F8
屏幕立刻开始闪烁
2,3秒中后
DOS界面
一大堆乱七八糟的16进制代码
2,3秒中后
FP自动关闭
我已经不感在运行了
尝试着用GDB调试
我又用的不熟
麻烦大家帮忙看看
变量说明
n 书的数目
k 抄写员的数目
a 书稿页数数组
子程序说明:
input 从文件读入
output 没什么用的
done 主函数 他有三个子函数
side1 n=k时的边界条件
side2 k=1时的边界条件 有一个子函数:sigema 用于求和
digui 递归
在提出这个问题的40分钟内
我已经编出了非递归的程序了
(自己编的)