Ich bezog mich auf shmias Aussage und habe sie widerlegt.
Ich sage ja: Es ist NICHT das Rucksackproblem bzw. man könnte es als Sonderfall des Rucksackproblems sehen, aber schon ein sehr besonderer.
Prinzipiell würde ich das ganze so machen:
Delphi-Quellcode:
function FindCombination(a: TIntegerDynArray; maxValue: Integer): Integer;
var I, J, value, max: Integer;
begin
I:=0;
max:=0;
while I<length(a) do
begin
if a[I]=maxValue then
begin
result:=a[I];
exit;
end else if a[I]<maxValue then
begin
value:=a[I];
for J:=Succ(I) to high(a) do
if value+a[J]<maxValue then inc(value, a[J]);
if value>max then max:=value;
end;
inc(I);
end;
result:=max;
end;
EDIT: Dummer Fehler...