由於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 < 1或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(如果適用1 <相同的情況)。
燦你確認你已經以正確的方式提及了'm'和'n',並且有時候沒有使用錯誤的引用?看起來你在某個時候混淆了它們。 – trincot
我提到他們的權利,告訴我你在哪裏混亂? – Godfather
令我困惑的是數組的大小是'm',但絕不允許你訪問'n'上的元素。所以如果'n m',那麼如何處理's = n',因爲可能沒有'n-1'的數組元素?另外,我不明白'A'是從哪裏來的。 –
trincot