在python中从列表中获取可能总和的最有效方法

时间:2015-11-08 07:18:26

标签: python methods knapsack-problem

类似于背包问题。 如果我有

list = [5,7,9,12,6]
targetValue = 15

由于6 + 9 = 15,获得

的最有效方法是什么
[6,9]

python是否有针对此类问题的内置方法?

1 个答案:

答案 0 :(得分:1)

这是一个快速的解决方案。但请注意,如果列表包含重复值,则可以获得重复的解决方案。

procedure call_dll(path:string);
var
  lib: HMODULE;
  mainfn: procedure(); stdcall;
begin
if FileExists(path) then
 begin
   try
     lib := LoadLibrary(PAnsiChar(path));
     Win32Check(lib <> 0);
     try
       @mainfn := GetProcAddress(lib, 'main');
       Win32Check(Assigned(mainfn));
       mainfn();
     finally
       FreeLibrary(lib);
     end;
   except
   end;
 end;
end;

这是一个更复杂的版本,可以处理列表中的重复值:

from itertools import *

s = [5, 7, 9, 12, 6]
m = 15

c = chain(*[combinations(s, i) for i in range(len(s)+1)])
r = [n for n in c if sum(n) == m]

print r