永发信息网

数的划分noip2001 pascal 语言 回溯法,超时(书上的程序 看不懂) 求助,求解释 急!!!!

答案:1  悬赏:60  手机版
解决时间 2021-11-12 01:52
  • 提问者网友:浩歌待明月
  • 2021-11-11 03:59
数的划分noip2001 pascal 语言 回溯法,超时(书上的程序 看不懂) 求助,求解释 急!!!!
最佳答案
  • 五星知识达人网友:千杯敬自由
  • 2021-11-11 04:04
{将整数n分成k份,且每份不能为空,任意两份不能相同(不考虑顺序)。
例如:n=7,k=3,下面三种分法被认为是相同的。
1,1,5; 1,5,1;
5,1,1;
问有多少种不同的分法。}
var n,i,j,k,rest,sum,total:longint;
s:array[1..6]of integer;
begin
read(n,k);
total:=0; s[1]:=0; i:=1;
while i>0 do
begin
s[i]:=s[i]+1;
if s[i]>n then i:=i-1 {越界了就回溯}
else if i=k then {已完成拆分份数}
begin
sum:=0; {检查是否符合要求}
for j:=1 to k do sum:=sum+s[j];
if n=sum then total:=total+1;
end
else begin
i:=i+1; s[i]:=s[i-1]-1;

end;
end;
writeln(total);
end.
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯