这是一个非常典型的背包问题,或者更具体地说,是一个变币问题。
我们有几种方法可以解决这类问题,但我们可以轻松地使用动态编程来解决它。
这个page很好地解释了解决方案,请按照自己的步调消化它:)
快速浏览一下,这是一个关于问题的伪代码:
int coins[3] = {2, 3, 7};
for (int i = 0; i < 5; ++i)
for (int j = coins[i]; j <= X; ++j)
dp[j] += dp[j - coins[i]];
你也可以尝试this,这是Uva上一个非常类似的问题。