https://www.acmicpc.net/problem/1890
๋ฌธ์
N×N ๊ฒ์ํ์ ์๊ฐ ์ ํ์ ธ ์๋ค. ์ด ๊ฒ์์ ๋ชฉํ๋ ๊ฐ์ฅ ์ผ์ชฝ ์ ์นธ์์ ๊ฐ์ฅ ์ค๋ฅธ์ชฝ ์๋ ์นธ์ผ๋ก ๊ท์น์ ๋ง๊ฒ ์ ํ๋ฅผ ํด์ ๊ฐ๋ ๊ฒ์ด๋ค.
๊ฐ ์นธ์ ์ ํ์๋ ์๋ ํ์ฌ ์นธ์์ ๊ฐ ์ ์๋ ๊ฑฐ๋ฆฌ๋ฅผ ์๋ฏธํ๋ค. ๋ฐ๋์ ์ค๋ฅธ์ชฝ์ด๋ ์๋์ชฝ์ผ๋ก๋ง ์ด๋ํด์ผ ํ๋ค. 0์ ๋ ์ด์ ์งํ์ ๋ง๋ ์ข ์ฐฉ์ ์ด๋ฉฐ, ํญ์ ํ์ฌ ์นธ์ ์ ํ์๋ ์๋งํผ ์ค๋ฅธ์ชฝ์ด๋ ์๋๋ก ๊ฐ์ผ ํ๋ค. ํ ๋ฒ ์ ํ๋ฅผ ํ ๋, ๋ฐฉํฅ์ ๋ฐ๊พธ๋ฉด ์ ๋๋ค. ์ฆ, ํ ์นธ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ์ ํ๋ฅผ ํ๊ฑฐ๋, ์๋๋ก ์ ํ๋ฅผ ํ๋ ๋ ๊ฒฝ์ฐ๋ง ์กด์ฌํ๋ค.
๊ฐ์ฅ ์ผ์ชฝ ์ ์นธ์์ ๊ฐ์ฅ ์ค๋ฅธ์ชฝ ์๋ ์นธ์ผ๋ก ๊ท์น์ ๋ง๊ฒ ์ด๋ํ ์ ์๋ ๊ฒฝ๋ก์ ๊ฐ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ๊ฒ์ ํ์ ํฌ๊ธฐ N (4 ≤ N ≤ 100)์ด ์ฃผ์ด์ง๋ค. ๊ทธ ๋ค์ N๊ฐ ์ค์๋ ๊ฐ ์นธ์ ์ ํ์ ธ ์๋ ์๊ฐ N๊ฐ์ฉ ์ฃผ์ด์ง๋ค. ์นธ์ ์ ํ์๋ ์๋ 0๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ , 9๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์ ์์ด๋ฉฐ, ๊ฐ์ฅ ์ค๋ฅธ์ชฝ ์๋ ์นธ์๋ ํญ์ 0์ด ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
๊ฐ์ฅ ์ผ์ชฝ ์ ์นธ์์ ๊ฐ์ฅ ์ค๋ฅธ์ชฝ ์๋ ์นธ์ผ๋ก ๋ฌธ์ ์ ๊ท์น์ ๋ง๊ฒ ๊ฐ ์ ์๋ ๊ฒฝ๋ก์ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ค. ๊ฒฝ๋ก์ ๊ฐ์๋ 2^63-1๋ณด๋ค ์๊ฑฐ๋ ๊ฐ๋ค.
์ค๋ฒ1. dp ์ค์๋ ์ฌ์ดํธ์ด๋ค
์ ์์ฌํญ!
๋ต์ ๋ฒ์๊ฐ 2^63-1๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ผ๋ฏ๋ก int ํ์ผ๋ก ํ๋ฉด ํ๋ฆฐ๋ค ใ ใ
int์ ๋ฒ์๋ ์ต๋ 2^31-1 ์ด๋ฏ๋ก, long long ํ์ผ๋ก ๊ณ ์ณ์ฃผ์๋๋ ๋ง์์
main idea๋ ๊ฒฝ์ฐ์ ์๋ฅผ dp๋ก ๋์ ์ํค๋ ๊ฒ์ด๋ค.
์ฒ์์ ์์ด๋์ด๋ ๋ ์ฌ๋ฆฌ๊ธฐ ์ฌ์ ๋๋ฐ, ๊ตฌํ ํ ๋ต์ด ํ๋ฆฌ๊ฒ ๋์์ ์ด๋๊ฐ ํ๋ ธ๋์ง ์ฐพ์๋ณด๋
๋ง์ง๋ง์ map[i][j]๊ฐ 0์ผ๋๋ map[i][j]์ ๋ณธ์ธ์ ๊ฐ์ด ๊ณ์ ๋์ ๋์ด์ ํ๋ฆฐ ๊ฒ์ด์๋ค
๊ทธ๋์ map[i][j] == 0์ผ๋ continue;๊ตฌ๋ฌธ์ ๋ฃ์ด์คฌ๋๋ ๋ต์ด ์ฌ๋ฐ๋ฅด๊ฒ ์ถ๋ ฅ๋์๋ค.
๋์ ํ์ด
#include <iostream>
#include <string>
using namespace std;
int main(){
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
int n;
int map[101][101]={0};
long long cnt[101][101] = {0};
cin >> n;
for (int i = 0; i < n; ++i){
for (int j = 0; j < n; ++j){
cin >> map[i][j];
}
}
cnt[0][0] = 1;
for (int i = 0; i < n; ++i){
for (int j = 0; j < n; ++j){
if(map[i][j]==0) continue; // ๋ง์ง๋ง์ ๊ณ์ ๊ฐ์ด ๋์ ๋๋๊ฑธ ๋ง๊ธฐ์ํด ์์ธ์ฒ๋ฆฌ ํ์
int go = map[i][j];
if(i + go < n) cnt[i + go][j] += cnt[i][j];
if(j + go < n) cnt[i][j + go] += cnt[i][j];
}
}
cout << cnt[n-1][n-1];
return 0;
}
'๐ ์๊ณ ๋ฆฌ์ฆ > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C++/BOJ] 10942 : ํฐ๋ฆฐ๋๋กฌ? (DP) (0) | 2023.03.18 |
---|---|
[C++/BOJ] 12865 : ํ๋ฒํ ๋ฐฐ๋ญ (DP) / ํ ์คํธ์ผ์ด์ค ํฌํจ (1) | 2023.03.17 |
[C++/BOJ] 9251 : LCS (DP) (0) | 2023.03.16 |
[C++/BOJ] 9465 : ์คํฐ์ปค (DP) (0) | 2023.03.15 |
[C++/BOJ] 10971 : ์ธํ์ ์ํ 2 (์์ ํ์, dfs, Backtracking) (0) | 2023.03.06 |