https://www.acmicpc.net/problem/1520
1520๋ฒ: ๋ด๋ฆฌ๋ง ๊ธธ
์ฌํ์ ๋ ๋ ์ธ์ค์ด๋ ์ง๋๋ฅผ ํ๋ ๊ตฌํ์๋ค. ์ด ์ง๋๋ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ์ง์ฌ๊ฐํ ๋ชจ์์ด๋ฉฐ ์ฌ๋ฌ ์นธ์ผ๋ก ๋๋์ด์ ธ ์๋ค. ํ ์นธ์ ํ ์ง์ ์ ๋ํ๋ด๋๋ฐ ๊ฐ ์นธ์๋ ๊ทธ ์ง์ ์ ๋์ด๊ฐ ์ฐ์ฌ ์์ผ
www.acmicpc.net
์ด๊ฑฐ... ๋ํํ ๋ ๋๋ฌด ์ด๋ ค์ ๋ค...
์ค๋ ๊ณ ๋ฏผํ๊ณ ํํธ ๋ด๋ ์ ๋ชจ๋ฅด๊ฒ ์ด์ ๋ค๋ฅธ ๋ถ๋ค ํ์ด๋ฅผ ์์ฃผ ๋ง์ด ์ฐธ๊ณ ํ์
๋ค๋ฅธ ๋ถ๋ค ํ์ด ๋ณผ๋์๋ ์ดํดํ๋ ๋ฐ ์ข ์ค๋ ๊ฑธ๋ ธ๋น...ใ
๊ฒฐ๋ก ๋ถํฐ ๋งํ์๋ฉด ์ด ๋ฌธ์ ๋ dfs + dp ๋ฌธ์ ๋ค
ํ์ฌ ์นธ์ผ๋ก๋ถํฐ ๋์ฐฉ์ ๊น์ง ์ด๋ํ๋ ๊ฒฝ๋ก์ ์๋ ์ธ์ ํ ์นธ(์ํ์ข์ฐ, ์ต๋ 4๊ฐ)์ ์์์ ์ผ๋ก ๋์ฐฉ์ ๊น์ง ์ด๋ํ๋ ๊ฒฝ๋ก์ ์๋ค์ ํฉ์ด๋ค.
๊ฐ ์นธ์ ์์์ ์ผ๋ก ๋์ฐฉ์ ๊น์ง ์ด๋ํ ์ ์๋์ง ์ฌ๋ถ๋ dfs๋ก ํ์ธํ๋ค.
ํน์ ์นธ์ ์์์ ์ผ๋ก dfs๋ฅผ ์ํํ์ ๋, ํ์์ (1)๋์ด์ ๋ฐฉ๋ฌธํ ์นธ์ด ์๊ฑฐ๋, (2)๋์ฐฉ์ ์ ๋๋ฌํ ๊ฒฝ์ฐ ์ข ๋ฃ๋๋ค.
๋ฐ๋ผ์ (0,0)์ ์์์ ์ผ๋ก dfs๋ฅผ ์ฌ๊ท์ ์ผ๋ก ๊ตฌํํ๋ฉด ํ ์๊ฐ ์๋ค.
๊ทธ๋ฐ๋ฐ ์ด ๋ฌธ์ ์์๋ ๋จ์ dfs๋ก ํ๋ฉด ์๊ฐ์ด๋ ๋ฉ๋ชจ๋ฆฌ ์ด๊ณผ๊ฐ ๋ ๊ฑฐ๋ค!!
๊ทธ๋์ ๋์ ๊ณํ๋ฒ์ ์ด์ฉํด์ผํ๋ค.
๋ชจ๋ ์นธ์์ dfs๋ฅผ ์ํํ์ฌ ๊ฒฝ๋ก์ ๊ฐ์๋ฅผ ๊ตฌํ ๋๋ง๋ค ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํด๋๋ค๋ฉด,
ํ์ ์ค ๊ฐ์ด ์ ์ฅ๋์ด ์๋ ์นธ์ ๋ง๋ ๋๋ง๋ค ๋งค๋ฒ ํ์์ ์๋ก ์ํํ ํ์๊ฐ ์๊ณ , ์ ์ฅํด๋ ๊ฐ์ ๊ฐ์ ธ์ค๊ธฐ๋ง ํ๋ฉด ๋๋ค.
์ด๋ ๊ฒ ํ๋ฉด ๋ถํ์ํ ์ฐ์ฐ์ ์ค์ผ ์ ์๋ฐ
#include <iostream>
int m,n;
int graph[500][500]; //์ง๋
int dp[500][500]; //๊ฒฝ๋ก ์ ์ ์ฅํ ๋ฐฐ์ด
int dx[4]={-1,0,1,0};
int dy[4]={0,1,0,-1};
using namespace std;
int dfs(int x, int y){
if(x==m-1 && y==n-1) return 1; //๋์ฐฉ์ ์ ๋๋ฌ
if(dp[x][y]!=-1) return dp[x][y]; //๋ฐฉ๋ฌธํ ์ ์ด ์์ผ๋ฉด ์ ์ฅ๋ ๊ฐ์ ๋ฆฌํด
dp[x][y]=0; //๋ฐฉ๋ฌธ ์ฒ๋ฆฌ
for(int i=0;i<4;i++){ //์ํ์ข์ฐ๋ก ์ธ์ ํ ์นธ ๋ฐฉ๋ฌธ
int nextX=x+dx[i];
int nextY=y+dy[i];
if(nextX>=0 && nextX<m && nextY>=0 && nextY<n){ //x,y ๋ฒ์ ์ฒดํฌ
if(graph[x][y] > graph[nextX][nextY]){ //๋์ด ์กฐ๊ฑด ์ฒดํฌ
dp[x][y] += dfs(nextX,nextY); //ํ์ ์ํ
}
}
}
return dp[x][y];
}
int main()
{
cin>>m>>n;
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
cin>>graph[i][j];
dp[i][j]=-1; //๋ฐฉ๋ฌธํ์ง ์์๋ค๋ ์๋ฏธ๋ก ๋ชจ๋ -1๋ก ์ด๊ธฐํ
}
}
cout<<dfs(0,0);
return 0;
}
'์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ์ด > DP' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ด์ฝํ ] ๊ธ๊ด (0) | 2023.02.26 |
---|---|
[์ด์ฝํ ] ๊ฐ๋ฏธ ์ ์ฌ (0) | 2023.02.25 |
[๋ฐฑ์ค]1890๋ฒ: ์ ํ (0) | 2023.02.14 |
[๋ฐฑ์ค]11048๋ฒ: ์ด๋ํ๊ธฐ (0) | 2023.02.12 |
[๋ฐฑ์ค]10844๋ฒ: ์ฌ์ด ๊ณ๋จ์ (0) | 2023.02.11 |