我坚持这个算法问题而且我得到了这个概念,但我很难想象它的实现。硬币行问题有一排n个硬币,其值是一些正整数c1,c2,.... 。 。 ,cn,不一定是明显的。目标是获得最大金额,但要受到限制,即不能拾取初始行中相邻的两个硬币。我这里有一个基本的算法。
F[0]←0; F[1]←C[1]
for i ← 2 to n do
F [i] ← max(C[i] + F [i − 2], F [i − 1])
return F [n]
有人可以在设置基本实现时启动我。谢谢。
答案 0 :(得分:0)
根据您的算法,你需要这样的东西:
int coin_row(int[] array, int index, int length)
{
if (index >= length) //beyond last coin
{
return 0;
}
int value = array[index];
if (index >= length - 1) //last coin
{
return value;
}
else if (index >= length - 2) //second last coin
{
return max(value, coin+row(array, index+1);
}
return max(value+coin_row(array, index+2), coin_row(array, index+1));
}
用
打电话coin_row(array, 0, length of array);
答案 1 :(得分:0)
int max(int a, int b) {
if(a > b) return a;
return b;
}
int coin_row(int[] C, int n) {
int F[n+1], i;
F[0] = 0; F[1] = C[1];
for(i = 2;i<=n;i++) {
F[i] = max(C[i] + F[i-2], F[i-1]);
}
return F[n];
}