The difference between our calculations is largely due to the weights you use. You use the weights in KM, which are rounded to two decimals. I used four decimals. This is significant when it comes to large numbers: using my weights, your solution amounts to a weight of 1168.7062 grams.

My procedure went in two steps: first determine the maximum number rounded up of threepences (the lowest unit of silver). Second, determine the weight effect of exchanging 10 threepences for a halfcrown (the lowest unit of large silver). Withe those two numbers, you can optimise the solution.

Maybe a more elegant procedure could have been found using linear programming, but that would have involved finding old books from my university days while the building is on fire.

BTW, I think that with linear programming you can introduce copper into the equation, but you'd probably need brute computer force to determine the optimal solution.

Peter