https://www.acmicpc.net/problem/1890
๋ฌธ์
N×N ๊ฒ์ํ์ ์๊ฐ ์ ํ์ ธ ์๋ค. ์ด ๊ฒ์์ ๋ชฉํ๋ ๊ฐ์ฅ ์ผ์ชฝ ์ ์นธ์์ ๊ฐ์ฅ ์ค๋ฅธ์ชฝ ์๋ ์นธ์ผ๋ก ๊ท์น์ ๋ง๊ฒ ์ ํ๋ฅผ ํด์ ๊ฐ๋ ๊ฒ์ด๋ค.
๊ฐ ์นธ์ ์ ํ์๋ ์๋ ํ์ฌ ์นธ์์ ๊ฐ ์ ์๋ ๊ฑฐ๋ฆฌ๋ฅผ ์๋ฏธํ๋ค. ๋ฐ๋์ ์ค๋ฅธ์ชฝ์ด๋ ์๋์ชฝ์ผ๋ก๋ง ์ด๋ํด์ผ ํ๋ค. 0์ ๋ ์ด์ ์งํ์ ๋ง๋ ์ข ์ฐฉ์ ์ด๋ฉฐ, ํญ์ ํ์ฌ ์นธ์ ์ ํ์๋ ์๋งํผ ์ค๋ฅธ์ชฝ์ด๋ ์๋๋ก ๊ฐ์ผ ํ๋ค. ํ ๋ฒ ์ ํ๋ฅผ ํ ๋, ๋ฐฉํฅ์ ๋ฐ๊พธ๋ฉด ์ ๋๋ค. ์ฆ, ํ ์นธ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ์ ํ๋ฅผ ํ๊ฑฐ๋, ์๋๋ก ์ ํ๋ฅผ ํ๋ ๋ ๊ฒฝ์ฐ๋ง ์กด์ฌํ๋ค.
๊ฐ์ฅ ์ผ์ชฝ ์ ์นธ์์ ๊ฐ์ฅ ์ค๋ฅธ์ชฝ ์๋ ์นธ์ผ๋ก ๊ท์น์ ๋ง๊ฒ ์ด๋ํ ์ ์๋ ๊ฒฝ๋ก์ ๊ฐ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ๊ฒ์ ํ์ ํฌ๊ธฐ N (4 ≤ N ≤ 100)์ด ์ฃผ์ด์ง๋ค. ๊ทธ ๋ค์ N๊ฐ ์ค์๋ ๊ฐ ์นธ์ ์ ํ์ ธ ์๋ ์๊ฐ N๊ฐ์ฉ ์ฃผ์ด์ง๋ค. ์นธ์ ์ ํ์๋ ์๋ 0๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ , 9๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์ ์์ด๋ฉฐ, ๊ฐ์ฅ ์ค๋ฅธ์ชฝ ์๋ ์นธ์๋ ํญ์ 0์ด ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
๊ฐ์ฅ ์ผ์ชฝ ์ ์นธ์์ ๊ฐ์ฅ ์ค๋ฅธ์ชฝ ์๋ ์นธ์ผ๋ก ๋ฌธ์ ์ ๊ท์น์ ๋ง๊ฒ ๊ฐ ์ ์๋ ๊ฒฝ๋ก์ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ค. ๊ฒฝ๋ก์ ๊ฐ์๋ 263-1๋ณด๋ค ์๊ฑฐ๋ ๊ฐ๋ค.
// ํ์ด : https://whkakrkr.tistory.com
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n;
cin >> n;
vector<vector<int>> v(n, vector<int>(n));
for(int i=0; i<n; i++) {
for(int j=0; j<n; j++) {
cin >> v[i][j];
}
}
vector<vector<long long>> dp(n, vector<long long>(n,0));
dp[0][0] = 1;
int value;
long long count;
for(int i=0; i<n; i++) {
for(int j=0; j<n; j++) {
value = v[i][j];
count = dp[i][j];
if(count==0 || (i==n-1 && j==n-1))
continue;
if(i+value<n) {
dp[i+value][j] += count;
}
if(j+value<n) {
dp[i][j+value] += count;
}
}
}
cout << dp[n-1][n-1];
}
'๐๏ธ ICPC Sinchon > Dynamic Programming' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ][C++] ๋ฐฑ์ค 2293๋ฒ: ๋์ 1 (0) | 2023.11.24 |
---|---|
[BOJ][C++] ๋ฐฑ์ค 11052๋ฒ: ์นด๋ ๊ตฌ๋งคํ๊ธฐ (0) | 2023.11.20 |
[BOJ][C++] ๋ฐฑ์ค 1309๋ฒ: ๋๋ฌผ์ (0) | 2023.11.13 |
[BOJ][C++] ๋ฐฑ์ค 10844๋ฒ: ์ฌ์ด ๊ณ๋จ ์ (0) | 2023.11.08 |
[BOJ][C++] ๋ฐฑ์ค 1912๋ฒ: ์ฐ์ํฉ (0) | 2023.11.03 |