質問:m x nグリッドがあります( 0 <= m、n <= 500)。グリッド内の各セルには k枚のコインが含まれています(kは負または0の場合もあります)。0、0から始まり、m-1、n-1で終わり、1ステップ下または1ステップ右に移動して、できるだけ多くのコインを集めることができます。k <0の場合、その特定のセルには強盗があり、そのセルに移動することはできません。隣接する8つのセルのいずれかに移動すると、 k枚のコインが奪われます。m-1、n-1に到達したときにコインはいくつありますか?
たとえば、グリッド内:
0,23,20,-32
13,14,44,-44
23,19,41,9
46,27,20,0
ans = 129(パスをたどることにより:0-13-23-46-27-20-0)
制限時間:5秒
このプログラムは動的計画法では解決できないと思います。そして、私はグラフ理論を研究していません(この問題を解決するために使用できる場合に備えて)。単純な再帰的アプローチは私が考えることができる唯一のことであり、与えられた制約の下では非効率的です。
それで、それを解決するための良いアプローチは何でしょうか?コードを投稿するだけでなく、開始方法を教えてください。グラフ理論に関連している場合は、どの定理が関係しているかを示すことが非常に役立ちます。