문제 주소: https://www.acmicpc.net/problem/1890
난이도: silver 2
dp = [[0]*N for i in range(N)]
dp[0][0] = 1
for i in range(N):
for j in range(N):
if i == N-1 and j == N-1: #가장 오른쪽 아랫칸 도착하면 중지
break
else:
down = i + board[i][j] #아랫칸으로 숫자만큼 이동할 경우 인덱스
right = j + board[i][j] #오른쪽칸으로 숫자만큼 이동할 경우 인덱스
if down < N: #범위안에 있으면
dp[down][j] += dp[i][j]
if right < N: #범위안에 있으면
dp[i][right] += dp[i][j]
import sys
input = sys.stdin.readline
N = int(input())
board = []
for i in range(N):
_temp = list(map(int, input().split()))
board.append(_temp)
dp = [[0]*N for i in range(N)]
dp[0][0] = 1
for i in range(N):
for j in range(N):
if i == N-1 and j == N-1:
break
else:
down = i + board[i][j]
right = j + board[i][j]
if down < N:
dp[down][j] += dp[i][j]
if right < N:
dp[i][right] += dp[i][j]
print(dp[N-1][N-1])