You are kinda Replacable to Me
Haskell, 95… 93 bytes

a#n|s&lt;-show=minimum[sum[1|(x,y)&lt;-s a`zip`s b,x/=y]|b&lt;-mapM(mapM(:s(56^7)))a,n==sum(read&lt;$&gt;b)]

Try it online!
The relevant function is (#), which takes as input the array a and the integer n and returns the minimum number of moves. Elements of a are represented as strings of digits.
How?
Standard bruteforce, we try all the possible substitutions and return the minimum number of changes. The only things I'm vaguely proud of are the show tricks I've found while working on this answer.

First of all, mapM(:show(56^7)) is shorter than mapM(\_-&gt;['0'..'9']) for enumerating all the possible digits substitutions of a single number. We save 3 bytes and we gain an exponentially slower solution.
Moreover, using show a`zip`show b instead of zip(a&gt;&gt;=id)$b&gt;&gt;=id saves another byte.
With the two previous tricks, we use the show function often enough that defining an alias for it saves an additional byte.