티스토리 뷰

728x90

문제

www.acmicpc.net/problem/14494

 

14494번: 다이나믹이 뭐예요?

(1, 1)에서 (n, m)에 도달하는 경우의 수를 구하여라. 단, 경우의 수가 엄청 커질 수 있으므로 경우의 수를 1,000,000,007(=1e9+7)로 나눈 나머지를 출력한다.

www.acmicpc.net

풀이 및 소스코드

그야말로 dp 그대로 풀었다.

n, m = map(int, input().split())
dp = [[0]*(m+1) for _ in range(n+1)]
dp[1][1] = 1
for y in range(1, n+1):
    for x in range(1, m+1):
        dx = x+1
        dy = y+1
        if 0<dx<=m:
            dp[y][dx] += dp[y][x]
        if 0<dy<=n:
            dp[dy][x] += dp[y][x]
        if 0<dx<=m and 0<dy<=n:
            dp[dy][dx] += dp[y][x]
print(dp[-1][-1]%1000000007)
반응형