Find number of ones to get a number using + and *
Python 2, 74 70 bytes



f=lambda n:min([n]+[f(j)+min(n%j*n+f(n/j),f(n-j))for j in range(2,n)])


Try it online!

Alternate version, 59 bytes (unverified)

f=lambda n:min([n]+[f(j)+f(n/j)+f(n%j)for j in range(2,n)])


This works at least up to n = 1,000,000, but I have yet to prove that it works for all positive n.

Try it online!