explore(v, ni, ki) = {
	if (v>=mx[ni+ki],
		mx[ni+ki]=max(v,mx[ni+ki]);
		if (ni<=#nn,
			explore(2*v+nn[ni], ni+1, ki);
		);
		if (ki<=#kk,
			explore(2*v+kk[ki], ni, ki+1);
		);
	);
}

T(n,k) = {
	nn = if (n, binary(n), [0]);
	kk = if (k, binary(k), [0]);
	mx = vector(#nn+#kk+2, l, -oo);
	explore(0, 1, 1);
	mx[#mx];
}

a(n) = T(n,n)

for (n=0, 2^13, print (n " " a(n)))

quit