题解:UVA13250 Balance Game
这个问题可以通过动态规划来解决。我们可以定义一个三维的动态规划数组
核心代码
// 遍历所有可能的砝码组合
for (int i = 1; i <= M; ++i) {
for (int weight = 0; weight <= W; ++weight) {
// 砝码n1
if (weight - n1 >= 0) {
dp[weight][i] += dp[weight - n1][i];
}
// 砝码n2
if (weight - n2 >= 0) {
dp[weight][i] += dp[weight - n2][i];
}
// 砝码n3
if (weight - n3 >= 0) {
dp[weight][i] += dp[weight - n3][i];
}
// 砝码n1, n2, n3的组合
if (i > 1) {
if (weight - n1 - n2 >= 0) {
dp[weight][i] += dp[weight - n1 - n2][i - 1];
}
if (weight - n1 - n3 >= 0) {
dp[weight][i] += dp[weight - n1 - n3][i - 1];
}
if (weight - n2 - n3 >= 0) {
dp[weight][i] += dp[weight - n2 - n3][i - 1];
}
if (weight - n1 - n2 - n3 >= 0) {
dp[weight][i] += dp[weight - n1 - n2 - n3][i - 1];
}
}
}
}
这是作者的第一篇题解,支持一下吧。