最初在他家的僧侣从一个农场顺序移动到另一个农场。总共有N个农场。
House-> 1st farm-> 2nd farm-> ... - >第N个农场
从一个农场跑到下一个农场消耗一个单位的和尚目前的能量。 最初,僧人在他的家里,搬到第一个农场时,他需要一个单位的能量。
您将获得阵列 milk [N] 和 apples [N] 以及僧侣的初始能量 P (at屋)。
在每个农场,Monk都可以选择采取牛奶(通过牛奶[i] 的量来增加能量)或来自农场的苹果。允许僧侣只吃全部牛奶或全部量的苹果,而不是一个或两个。
通过这样,Monk可以收集的最大苹果数量是多少,总是具有非负能量?
示例:
N = 3
P = 2
milk = {1, 2, 1}
apples = {100, 1, 100}
ans = 200
解决上述问题的任何方法或算法..
答案 0 :(得分:0)
使用:
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="style.css">
<script src="script.js"></script>
</head>
<body>
<audio id="audio" src="http://ricklemon.co.uk/game/sound.ogg" autostart="false" ></audio>
<a onclick="PlaySound()"><img src="http://ricklemon.co.uk/game/images/speaker.png" width="200px" /></a>
<script>
function PlaySound() {
var sound = document.getElementById("audio");
sound.play()
}
</script>
</body>
</html>
我们有了重复:
dp[i, j] = maximum amount of apples possible if we are at farm i
with j energy
然后取dp[i, j] = max{dp[i-1, j+1] + apples[i] # Take the apples at i, only if j >= 0
dp[i - 1, j - energy[i]] # Take the energy at i
的最大值(如果使用零索引)。
对于您的示例,dp[N - 1, _]
将是:
dp
您需要在dp[0, P-1] = dp[0, 1] = apples[0] = 100
dp[0, P-1+milk[0]] = dp[0, 2] = 0
dp[0, anything else] = -inf
dp[1, 0] = max{dp[0, 0 + 1] + apples[1],
dp[0, 0 - 2]}
= 101
dp[1, 1] = max{dp[0, 1 + 1] + apples[1],
dp[0, 1 - 2]}
= max{0 + 1, -inf}
= 1
dp[1, 2] = max{dp[0, 2 + 1] + apples[1],
dp[0, 2 - 2]}
= -inf
dp[1, 3] = max{dp[0, 3 + 1] + apples[1],
dp[0, 3 - 2]}
= 100
dp[2, 0] = max{dp[1, 0 + 1] + apples[2],
dp[1, 0 - 2]}
= 101
dp[2, 1] = max{dp[1, 1 + 1] + apples[2],
dp[1, 1 - 2]}
= -inf
dp[2, 2] = max{dp[1, 2 + 1] + apples[2],
dp[1, 2 - 2]}
= max{200, 101}
= 200
次迭代中迭代j
,直至i
的总和。
在实现中可能有各种优化,例如只使用一个或两个数组而不是矩阵。