let rec combinations n l =
match n, l with
| 0, _ -> [[]]
| _, [] -> []
| k, (x::xs) -> List.map ((@) [x]) (combinations (k-1) xs) @ combinations k xs
let solve n (lst : int list) =
seq { for e in 1..n do yield! combinations e lst }
|> Seq.groupBy List.sum
solve 8 [1..16]
|> Seq.last
|> printfn "%A"
bGV0IHJlYyBjb21iaW5hdGlvbnMgbiBsID0KICAgICAgICBtYXRjaCBuLCBsIHdpdGgKICAgICAgICB8IDAsIF8gLT4gW1tdXQogICAgICAgIHwgXywgW10gLT4gW10KICAgICAgICB8IGssICh4Ojp4cykgLT4gTGlzdC5tYXAgKChAKSBbeF0pIChjb21iaW5hdGlvbnMgKGstMSkgeHMpIEAgY29tYmluYXRpb25zIGsgeHMKICAgICAKbGV0IHNvbHZlIG4gKGxzdCA6IGludCBsaXN0KSA9IAogICAgICAgIHNlcSB7IGZvciBlIGluIDEuLm4gZG8geWllbGQhIGNvbWJpbmF0aW9ucyBlIGxzdCB9CiAgICAgICAgfD4gU2VxLmdyb3VwQnkgTGlzdC5zdW0KCnNvbHZlIDggWzEuLjE2XSAKfD4gU2VxLmxhc3QKfD4gcHJpbnRmbiAiJUEi