https://www.acmicpc.net/problem/11048
11048๋ฒ: ์ด๋ํ๊ธฐ
์ค๊ท๋ N×M ํฌ๊ธฐ์ ๋ฏธ๋ก์ ๊ฐํ์๋ค. ๋ฏธ๋ก๋ 1×1ํฌ๊ธฐ์ ๋ฐฉ์ผ๋ก ๋๋์ด์ ธ ์๊ณ , ๊ฐ ๋ฐฉ์๋ ์ฌํ์ด ๋์ฌ์ ธ ์๋ค. ๋ฏธ๋ก์ ๊ฐ์ฅ ์ผ์ชฝ ์ ๋ฐฉ์ (1, 1)์ด๊ณ , ๊ฐ์ฅ ์ค๋ฅธ์ชฝ ์๋ซ ๋ฐฉ์ (N, M)์ด๋ค. ์ค๊ท๋
www.acmicpc.net
๋๋ฌด BFS ๋ฌธ์ ์ฒ๋ผ ์๊ฒผ์ง๋ง bfs๋ก ํ๋ฉด ๋ฉ๋ชจ๋ฆฌ ์ด๊ณผ๊ฐ ๋๋ค
์ด ๋ฌธ์ ๋ ํ ์นธ์ผ๋ก๋ถํฐ ์ด๋ํ ์ ์๋ ์นธ์ด ์ต๋ 3๊ฐ๋ก ์ ํ๋์ด ์๊ณ , ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ๋ ์๋๊ธฐ ๋๋ฌธ์ dp๋ก ํ๋ฉด ๋๋ค
dp๋ฌธ์ ์ธ๊ฑธ ์๊ณ ํ๋ฉด ์์ฃผ ์ฝ๋ค
์ฒซ๋ฒ์งธ ์์ ๋ฅผ ๊ฐ์ง๊ณ ํ์ด๋ณด์
๋ฐฐ์ด์ 2๊ฐ ๋ง๋ค์ด์ค๋ค. maze์๋ ๋์ฌ์๋ ์ฌํ ์๋ฅผ, dp์๋ ํ๋ํ ์ฌํ ์์ ์ต๋๋ฅผ ์ ์ฅํ ๊ฑฐ๋ค
ํ ์นธ์ฉ ์ด๋ํ๋ฉด์ ๊ธฐ์กด๋ณด๋ค ๋ ๋ง์ ์ฌํ์ ์ป์ ์ ์๊ฒ ๋๋ฉด dp ๊ฐ์ ๊ฐฑ์ ํด์ค๊ฑฐ์
ํ ์นธ์ฉ ์์๋๋ก ํด๋ณด๋ฉด ์ด๋ ๊ฒ ๋๋น
ํ์ฌ๊น์ง ํ๋ํ ์ฌํ ์ (dp[ํ์ฌ์นธ]) + ๋ค์ ์นธ์ผ๋ก ์ด๋์ ์ถ๊ฐ๋ก ํ๋ํ ์ฌํ ์ (maze[๋ค์์นธ]) ์ ๊ฐ์ด dp[๋ค์์นธ] ๋ณด๋ค ํฐ ๊ฒฝ์ฐ์๋ง ๊ฐฑ์
๋ฐฐ์ด์ด ์์ผ๋๊น ๋๊น์ง ์ญ ํ๋์ฉ ํด๋ณด๋ฉด
#include <iostream>
using namespace std;
int main(){
int n,m; cin>>n>>m;
int maze[n][m], DP[n][m];
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
int x; cin>>x;
maze[i][j]=x; DP[i][j]=x;
}
}
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(i+1<n && DP[i][j]+maze[i+1][j] > DP[i+1][j]) DP[i+1][j]=DP[i][j]+maze[i+1][j];
if(i+1<n && j+1<m && DP[i][j]+maze[i+1][j+1] > DP[i+1][j+1]) DP[i+1][j+1]=DP[i][j]+maze[i+1][j+1];
if(j+1<m && DP[i][j]+maze[i][j+1]>DP[i][j+1]) DP[i][j+1]=DP[i][j]+maze[i][j+1];
}
}
cout<<DP[n-1][m-1];
return 0;
}
'์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ์ด > DP' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค]1520๋ฒ: ๋ด๋ฆฌ๋ง ๊ธธ (0) | 2023.02.17 |
---|---|
[๋ฐฑ์ค]1890๋ฒ: ์ ํ (0) | 2023.02.14 |
[๋ฐฑ์ค]10844๋ฒ: ์ฌ์ด ๊ณ๋จ์ (0) | 2023.02.11 |
[๋ฐฑ์ค] 11057๋ฒ : ์ค๋ฅด๋ง ์ (0) | 2023.02.10 |
[๋ฐฑ์ค] 1463๋ฒ : 1๋ก ๋ง๋ค๊ธฐ (0) | 2023.01.20 |