2018. 1. 7. 12:57, 알고리즘/BOJ
https://www.acmicpc.net/problem/10251
시작점에서 도착점까지 도달하는 경로 중에서 최소 방향전환을 해야하는지를 구해야합니다. 만약 연료를 고려하지 않는다면 최소 방향전환은 1번이겠지만 연료 때문에 복잡해집니다. 전수조사를 하게 되면 시간복잡도는 최대 O(200 combination 100) 이 되어 사실상 불가능합니다. 대신 4차원 Dynamic table을 생각합니다
D[i][j][t][d]. t : 턴 횟수 d : 0 - from right, 1 - from upward, 즉 (i, j)에 t번 턴을 해서 도달할 때 필요한 최소 연료량(단 d=0이면 왼쪽에서 온 경우, d=1이면 오른쪽에서 온 경우)
D[i][j][t][0] = D[i][j-1][t][0] < D[i][j-1][t-1][1] ? D[i][j-1][t][0]+row[i][j] : D[i][j-1][t-1][1]+row[i][j];
D[i][j][t][1] = D[i-1][j][t-1][0] < D[i-1][j][t][1] ? D[i-1][j][t-1][0]+col[i][j] : D[i-1][j][t][1]+col[i][j];
이기 때문에 이 다이나믹 테이블을 전부 채운 이후 D[M-1][N-1][t][0] 혹은 D[M-1][N-1][t][1]이 G 이하가 되는 최소의 t를 찾아 답을 출력하면 됩니다.
'알고리즘 > BOJ' 카테고리의 다른 글
[BOJ] 1620번: 나는야 포켓몬 마스터 이다솜 (0) | 2018.01.07 |
---|---|
[BOJ] 2580번: 스도쿠 (0) | 2018.01.07 |
[BOJ] 1005번: ACM Craft (0) | 2018.01.07 |
[BOJ] 11060번: 점프 점프 (0) | 2018.01.06 |
[BOJ] 10610번: CESTA (0) | 2018.01.06 |
[BOJ] 1629번: 곱셈 (0) | 2018.01.06 |
Comments