【发布时间】:2015-08-07 16:22:56
【问题描述】:
N 个建筑物排成一排,从左到右编号为 1 到 N。 蜘蛛侠在 1 号楼,想到达 N 号楼。 如果 i
输入:
第一行包含 N,建筑物的数量。 下一行包含 N 个空格分隔的整数,表示数组高度。
输出:
打印一个整数,上面问题的答案。
所以,我想到了这样的事情:
int calc(int arr[], int beg, int end, )
{
//int ans = INT_MIN;
if (beg == end)
return 0;
else if (beg > end)
return 0;
else
{
for (int i = beg+1; i <= end; i++ ) // Iterate over all possible combinations
{
int foo = arr[i] - arr[beg]; // Check if power of two or not
int k = log2(foo);
int z = pow(2,k);
if (z == foo) // Calculate the minimum value over multiple values
{
int temp = calc(arr,i,end);
if (temp < ans)
temp = ans;
}
}
}
}
以上是我要解决的问题,链接如下:https://www.codechef.com/TCFS15P/problems/SPIDY2
但是,上面的递归并不完全正确。我是否也必须在其中传递answer 的值?
【问题讨论】:
-
您是在寻找运行时(重复)还是算法?
-
不,我正在寻找这个问题的递归解决方案。我尝试像上面那样开发它,但我真的做不到。
-
与其使用
log2()和pow(),不如使用Integer.bitCount(foo) == 1)来测试foo是否是2 的幂。另外,你的意思是不是“递归解决方案”而不是“精确重复”?最后,calc()的第四个参数是怎么回事,或者end后面的逗号是错字吗? -
"Recurrence" 不是您要找的词。
-
仔细阅读问题陈述。它说某事应该是 2 的幂。看看代码。 2的幂在哪里检查?检查是否正确?还有这个来自不同步骤的能量小问题。需要总结一下。你在哪里做这个?
标签: algorithm