永发信息网

动态规划 DP 复制书稿 递归算法 代码查错

答案:1  悬赏:50  手机版
解决时间 2021-02-15 16:42
program copy;
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;
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分钟内
我已经编出了非递归的程序了
(自己编的)
最佳答案
非递归的程序
const
mm=501;
var
f,t:array[0..mm,0..mm] of longint;
a,b:array[0..mm] of longint;
n,k,i,j,h,g,q,p:longint;
function max(x,y:longint):longint;
begin
if x>y then exit(x)
else exit(y);
end;
begin
read(n,k);
fillchar(a,sizeof(a),0);
fillchar(b,sizeof(b),0);
fillchar(f,sizeof(f),10);
fillchar(t,sizeof(t),0);
for i:=1 to n do begin read(a[i]); b[i]:=b[i-1]+a[i] end;
f[n+1,0]:=0;
for j:=1 to k do
for i:=n-j+1 downto 1 do
for h:=n-j+2 downto i+1 do
begin
g:=max(f[h,j-1],b[h-1]-b[i-1]);
if f[i,j]>=g then begin
f[i,j]:=g;
t[i,j]:=h;
end;
end;
p:=1;q:=t[1,k];
while q<=n do
begin
writeln(p,' ',q-1);
p:=q;
q:=t[q,k-1];
k:=k-1;
end;
writeln(p,' ',q-1);
end.
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
野生河鱼馆怎么去啊,有知道地址的么
满族有什么忌讳
选取绿色叶片和有白班叶片的牵牛花进行光合作
好帮手厨具五金地址在什么地方,想过去办事
上水管被钻头打破能用堵漏王处理吗
怎么画坐在前排的女生,有背影跟侧脸的,还有
武汉电子眼违章怎样处理,需要详细流程!
【落单是什么意思】落单?什么意思?怎么读
西吴老家地址有知道的么?有点事想过去
湖南大学 分析化学 哪个专业好 还有就是379
母瓜蒌下面有根吗
隆鑫三轮专卖店地址有知道的么?有点事想过去
无线网卡插入电脑后没有在连接到网络上显示是
法国萨拉化妆品怎么样?
各位认为中国历史最狡猾的人是谁
推荐资讯
尔娄村在什么地方啊,我要过去处理事情
鑫通物流(环城东路47号-1)地址在什么地方,想
【how,how a,what,what a 这四个表示感叹的
潍城区于河街道南毕村村民委员会在什么地方啊
阳光俪人儿童摄影在哪里啊,我有事要去这个地
打皇室战争的自定义锦标赛能增加皇冠宝箱或部
养殖什么不愁销路鹅
汉庭宾馆地址在什么地方,想过去办事
【东北三省联考吧】说下2013年东北三省三校联
【2013陕西高考数学】高三学生时间紧想做一份
三台华康医院-住院部地址在哪,我要去那里办
我是湖南永州的,怎么把户口迁湖南到怀化呢?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?