あなたは位置 x,y のグリッドにいます。行の次元は dx,dy です。1 ステップで、行または列で 1 歩前または後ろに歩くことができます。どの時点でもグリッドから離れないように、M ステップを実行できる方法は何通りありますか?
同じ場所に複数回訪問できます。
x,y <= 0 または x,y > dx,dy の場合、グリッドを離れます。
1 <= M <= 300
1 <= x,y <= dx,dy <= 100
入力:
M
xy
dx dy
出力:
方法の数
例:
入力:
1
6 6
12 12
出力:
4
例:
入力:
2
6 6
12 12
出力:
16
位置 6,6 にいる場合、(6,5)、(6,7)、(5,6)、(7,6) まで歩くことができます。
パスカルの三角形を使用してそれを解決する方法に行き詰まっています。それは正しいアプローチですか? 私はすでにブルートフォースを試しましたが、遅すぎます。
C[i][j], Pascal Triangle
C[i][j] = C[i - 1][j - 1] + C[i - 1][j]
T[startpos][stp]
T[pos][stp] = T[pos + 1][stp - 1] + T[pos - 1][stp - 1]