以下是链接:https://www.codechef.com/ZCOPRAC/problems/ZCO14004。 我可以通过代码递归执行:
ans=answer(array[],0,0,0);
function answer(tokens[], j, ans,n){
if(n==0||i>=tokens.length){
return 0;
}
int k=ans+=tokens[i];
if(max<(k)){
max=k;
}
ans(tokens,i+1,ans,n-1);
ans(tokens,i+2,ans,2);
return max;
}
但这需要花费大量时间进行大量投入。请告诉我应该在哪里记下代码。谢谢
答案 0 :(得分:1)
据我所知,线性方法可以用非常简单的方式实现。 对于每个游戏,我们有三种可能的最佳收益:
因此,只需跟踪这三个变量就可以了,只需用简单的数学运算来处理循环。
var input = [3, 2, 3, 2, 3, 5, 1, 3];
var sum2 = 0; // best case with two more games allowed
var sum1 = 0; // best case with one more game allowed
var sum0 = 0; // best case with no more game allowed
for (var i = 0; i < input.length; i++) {
var best = Math.max(sum0, sum1, sum2);
sum0 = sum1 + input[i];
sum1 = sum2 + input[i];
sum2 = best;
}
document.write(Math.max(sum0, sum1, sum2));
&#13;