F
Flashcqxg
Unregistered / Unconfirmed
GUEST, unregistred user!
算法很简单:从一个数组中取出N个数,使之和等于一个指定的数。
我是参考的递归算法,但感觉太慢了,不知道有没有好的改进办法,使之更快,请大家多多指教
我的算法如下:
//参数说明:S这指定和
// N为指定取多少个数
// w[]为这些数的数组
function knap(s, n: Integer): Boolean;
begin
if s <= 0 then
knap := True
else
if (s < 0) or ((s > 0) and (n < 1)) then
knap := False
else
begin
if knap(s - w[n], n - 1) = True then
begin
ShowMessage('n为:' + IntToStr + 'w[n]为' + IntToStr(w[n]));
knap := True;
end
else
knap := knap(s, n - 1);
end;
end;
我是参考的递归算法,但感觉太慢了,不知道有没有好的改进办法,使之更快,请大家多多指教
我的算法如下:
//参数说明:S这指定和
// N为指定取多少个数
// w[]为这些数的数组
function knap(s, n: Integer): Boolean;
begin
if s <= 0 then
knap := True
else
if (s < 0) or ((s > 0) and (n < 1)) then
knap := False
else
begin
if knap(s - w[n], n - 1) = True then
begin
ShowMessage('n为:' + IntToStr + 'w[n]为' + IntToStr(w[n]));
knap := True;
end
else
knap := knap(s, n - 1);
end;
end;