POJ 2353 Ministry(양방향 DP)
/*
: M*N, : 、 、 , 。
: DP( for ), 、 、 ,
Dijskra , !
*/
#include <cstdio>
#include <cstring>
const int mMax = 107;
const int nMax = 507;
int map[mMax][nMax];
__int64 d[nMax];
int dir[mMax][nMax];
int M, N;
void print(int x, int y)
{
if(dir[x][y] == 0)
print(x - 1, y);
else if(dir[x][y] == 1)
print(x, y - 1);
else if(dir[x][y] == 2)
print(x, y + 1);
printf("%d
", y + 1);
}
int main()
{
while(scanf("%d%d", &M, &N) != EOF)
{
int i, j;
for(i = 0; i < M; ++ i)
{
for(j = 0; j < N; ++ j)
scanf("%d", &map[i][j]);
}
for(j = 0; j < N; ++ j) d[j] = map[0][j], dir[0][j] = -1;
for(i = 1; i < M; ++ i)
{
for(j = 0; j < N; ++ j) d[j] = d[j] + map[i][j], dir[i][j] = 0;
for(j = 1; j < N; ++ j)
{
if(d[j] > d[j - 1] + map[i][j])
d[j] = d[j - 1] + map[i][j], dir[i][j] = 1;
}
for(j = N - 2; j >= 0; -- j)
{
if(d[j] > d[j + 1] + map[i][j])
d[j] = d[j + 1] + map[i][j], dir[i][j] = 2;
}
}
int _max = 0;
for(j = 1; j < N; ++ j)
{
if(d[j] < d[_max])
_max = j;
}
print(M - 1, _max);
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.