https://www.acmicpc.net/problem/2169
๋ฌธ์
NASA์์๋ ํ์ฑ ํ์ฌ๋ฅผ ์ํด ํ์ฑ์ ๋ฌด์ ์กฐ์ข ๋ก๋ด์ ๋ณด๋๋ค. ์ค์ ํ์ฑ์ ๋ชจ์ต์ ๊ต์ฅํ ๋ณต์กํ์ง๋ง, ๋ก๋ด์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ผ๋ง ์ ๋๊ธฐ ๋๋ฌธ์ ์งํ์ N×M ๋ฐฐ์ด๋ก ๋จ์ํ ํ์ฌ ์๊ฐํ๊ธฐ๋ก ํ๋ค.
์งํ์ ๊ณ ์ ์ฐจ์ ํน์ฑ์, ๋ก๋ด์ ์์ง์ผ ๋ ๋ฐฐ์ด์์ ์ผ์ชฝ, ์ค๋ฅธ์ชฝ, ์๋์ชฝ์ผ๋ก ์ด๋ํ ์ ์์ง๋ง, ์์ชฝ์ผ๋ก๋ ์ด๋ํ ์ ์๋ค. ๋ํ ํ ๋ฒ ํ์ฌํ ์ง์ญ(๋ฐฐ์ด์์ ํ๋์ ์นธ)์ ํ์ฌํ์ง ์๊ธฐ๋ก ํ๋ค.
๊ฐ๊ฐ์ ์ง์ญ์ ํ์ฌ ๊ฐ์น๊ฐ ์๋๋ฐ, ๋ก๋ด์ ๋ฐฐ์ด์ ์ผ์ชฝ ์ (1, 1)์์ ์ถ๋ฐ์์ผ ์ค๋ฅธ์ชฝ ์๋ (N, M)์ผ๋ก ๋ณด๋ด๋ ค๊ณ ํ๋ค. ์ด๋, ์์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ฉด์, ํ์ฌํ ์ง์ญ๋ค์ ๊ฐ์น์ ํฉ์ด ์ต๋๊ฐ ๋๋๋ก ํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ N, M(1≤N, M≤1,000)์ด ์ฃผ์ด์ง๋ค. ๋ค์ N๊ฐ์ ์ค์๋ M๊ฐ์ ์๋ก ๋ฐฐ์ด์ด ์ฃผ์ด์ง๋ค. ๋ฐฐ์ด์ ๊ฐ ์๋ ์ ๋๊ฐ์ด 100์ ๋์ง ์๋ ์ ์์ด๋ค. ์ด ๊ฐ์ ๊ทธ ์ง์ญ์ ๊ฐ์น๋ฅผ ๋ํ๋ธ๋ค.
๋ฐฑ์ค ๊ณจ๋2 dp๋ฌธ์ !
์์นซํ๋ฉด ๊ทธ๋ํ ํ์ ๋ฌธ์ ๋ก ์คํดํ ์ ์์ ๊ฒ ๊ฐ์๋ค.
๊ทธ๋ฆฌ๊ณ 60ํผ์ผํธ ์ ๋์์ ํ๋ฆฐ๋ค๋ฉด ์๋์ฒ๋ผ ์ ์ฒด๊ฐ ์์์ธ ํ ์คํธ์ผ์ด์ค๋ฅผ ๊ณ ๋ คํด๋ณผ ๊ฒ!
์ ๊ฐ ๊ทธ๋ ๊ฒ ํ๋ ธ์ด์,,,
๋ฐ๋ณต๋ฌธ ๋๋ฆฌ๋ฉด์ dp๋ฅผ ์ฑ์ธ ๋, ๋ฒ์๋ฅผ ์ ์ค์ ํด์ผ ํ๋ค.
์ด์ฐจ์๋ฐฐ์ด์ ์ถ๋ ฅํ๋ฉด์ ์ฝ๋๋ฅผ ์์ ํ๋ฉด ๋์์ด ๋๋ค^-^
๋์ ํ์ด
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
int n;
int m;
int map[1001][1001];
int fromRight[1001];
int fromLeft[1001];
int dp[1001][1001];
int main(){
ios_base::sync_with_stdio(false);
cin.tie(0);
cin >> n >> m;
for (int i = 1; i <= n; ++i){
for (int j = 1; j <= m; ++j){
cin >> map[i][j];
}
}
for (int j = 1; j <= m; ++j)
{ // ๋งจ ์์ค
dp[1][j] += dp[1][j - 1] + map[1][j];
}
for (int i = 2; i <= n; ++i){
// ์ผ vs ์
fromLeft[1] = dp[i - 1][1] + map[i][1];
fromRight[m] = dp[i - 1][m] + map[i][m];
for (int j = 2; j <= m; ++j){
fromLeft[j] = max(dp[i - 1][j], fromLeft[j - 1]) + map[i][j];
}
// ์ค vs ์
for (int j = m-1; j > 0; --j){
fromRight[j] = max(dp[i - 1][j], fromRight[j + 1])+ map[i][j];
}
// max๋ฅผ dp์ ์ ์ฅ
for (int j = 1; j <= m; ++j){
dp[i][j] = max(fromLeft[j], fromRight[j]);
}
}
// cout << "\n";
// for (int i = 0; i <= n+1; ++i){
// for (int j = 0; j <= m+1; ++j){
// cout << dp[i][j] << " ";
// }
// cout << "\n";
// }
cout << dp[n][m];
}
'๐ ์๊ณ ๋ฆฌ์ฆ > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C++/BOJ] 2493 : ํ (Stack) (0) | 2024.11.17 |
---|---|
[C++/BOJ] 11660 : ๊ตฌ๊ฐ ํฉ ๊ตฌํ๊ธฐ 5 (DP) (0) | 2024.11.17 |
[C++/BOJ] 2644 : ์ด์๊ณ์ฐ (๋ค์ต์คํธ๋ผ) (0) | 2023.05.18 |
[C++/BOJ] 1325 : ํจ์จ์ ์ธ ํดํน (BFS/DFS) (1) | 2023.05.14 |
[C++/BOJ] 1012 : ์ ๊ธฐ๋ ๋ฐฐ์ถ (BFS/DFS) (0) | 2023.05.12 |