출처: https://bumcrush.tistory.com/182 [맑음때때로 여름]
https://www.acmicpc.net/problem/1890
1890번: 점프
문제 N×N 게임판에 수가 적혀져 있다. 이 게임의 목표는 가장 왼쪽 위 칸에서 가장 오른쪽 아래 칸으로 규칙에 맞게 점프를 해서 가는 것이다. 각 칸에 적혀있는 수는 현재 칸에서 갈 수 있는 거��
www.acmicpc.net
#include <iostream>
using namespace std;
const int MAX = 100 + 1;
int N;
int arr[MAX][MAX];
long long dp[MAX][MAX];
void findway()
{
dp[0][0] = 1;
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
{
if (arr[i][j] == 0)
continue;
if (i + arr[i][j] < N)
dp[i + arr[i][j]][j] += dp[i][j];
if (j + arr[i][j] < N)
dp[i][j + arr[i][j]] += dp[i][j];
}
}
cout << dp[N - 1][N - 1];
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL);
cin >> N;
for (int i = 0; i < N; i++)
for (int j = 0; j < N; j++)
cin >> arr[i][j];
findway();
}
그렇게 어려운 것은 없었고 논리 자체도 단순하다. 작은 부분부터 계산해서 점점 키워나가는 dynamic programming 특성상 갈 수 있는 방향인 오른쪽과 아랫쪽만 정의해놓으면 됐다.
백준 6359 만취한 상범(dynamic programming) (0) | 2020.07.08 |
---|---|
백준 1904 01타일(dynamic programming) (0) | 2020.07.08 |
백준 11051 이항 계수2(dynamic programming) (0) | 2020.07.07 |
백준 11722 가장 긴 감소하는 부분수열(dynamic programming) (0) | 2020.07.07 |
백준 2133 타일 채우기(dynamic programming) (0) | 2020.07.07 |
댓글 영역