{ a = vector(10 000, n, oo); \\ seed a[1] = 1; a[2] = 2; \\ sum of distinct terms (<= #a) s = []; for (n=1, #a, print (n " " a[n]); if (a[n]<=#a, x = select(v -> v<=#a, apply(o -> o+a[n], s)); for (k=1, #x, a[x[k]] = min(a[x[k]], a[x[k]-a[n]]+2^(n-1)); ); s = setunion(s, setunion(x, [a[n]])); ); ); } quit