【发布时间】:2016-05-14 16:18:58
【问题描述】:
给定2 elements n, s and an array A of size m,其中s is initial position位于1 <= s <= n之间,我们的任务是对s执行m个操作,在每个操作中我们要么使s = s + A[i]要么s = s - A[ i],我们必须打印 m 操作后所有可能的值,并且所有这些值应介于 1 - n(包括)之间。
重要提示:如果在操作过程中我们得到一个值 s n, 我们不会在 s 的值上走得更远。
我使用 BFS 解决了这个问题,但问题是 BFS 方法在这里不是最优的,有人可以向我建议任何其他更优的方法或算法将有很大帮助。
例如:-
如果 n = 3,s = 3,并且 A = {1, 1, 1}
3
/ \
operation 1: 2 4 (we don’t proceed with 4 as it is > n)
/ \ / \
operation 2: 1 3 3 5
/ \ / \ / \ / \
operation 3: 0 2 2 4 2 4 4 6
因此,按照上述规则可达到的最终值是 2 和 2(即 2 的两倍)。我们不考虑第三个,因为它有一个 > n 的中间状态(如果
【问题讨论】:
-
您能否确认您以正确的方式引用了
m和n,并且有时没有使用错误的引用?看起来你在某个时候把它们弄混了。 -
我说得对,告诉我你哪里有困惑?
-
令我困惑的是数组的大小是
m,但你永远不能访问n以上的元素。所以如果n < m那么数组的最后一项是无用的。如果n > m,那么s = n怎么办,因为n-1可能没有数组元素?另外,我不明白i来自A[i]。 -
我们有 m 个操作,数组大小为 m,在每个操作中我们访问数组的第 i 个值(其中 0= 0。
-
我现在更加困惑:数组大小是一?你能提供你试过的代码吗?
标签: algorithm data-structures dynamic-programming