어렵지 않은 DP 문제
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <vector> #include <math.h> #include <queue> #include <set> #include <list> #include <utility> #include <functional> #define MAX 1005 #define INF 987654321 #define MOD 1000000 #pragma warning(disable:4996) using namespace std; typedef long long ll; typedef pair<int, int> pi; int n, x, y, a, b; ll from[5], to[5]; int dy[5] = { 0,1,0,-1,0 }, dx[5] = {0,0,1,0,-1}; int main() { scanf("%d%d%d", &n, &x, &y); for (int i = 0; i < n; i++) { scanf("%d%d", &a, &b); //printf("<%d %d %d %d>\n", x, y, a, b); for (int p = 0; p < 5; p++) { for (int q = 0; q < 5; q++) { //printf("-1"); int tmp= abs((y + dy[p]) - (b + dy[q])) + abs((x + dx[p]) - (a + dx[q])); //printf("-2"); if (p == 0) { to[q] = tmp+from[p]; continue; } if (to[q] > tmp+from[p]) to[q] = tmp+from[p]; } if (i == 0) break; } swap(from, to); x = a, y = b; } ll ans = from[0]; for (int i = 1; i < 5; i++) ans = min(ans, from[i]); printf("%lld", ans); return 0; }
'IT > BOJ' 카테고리의 다른 글
백준(BOJ) 1026 보물섬 ** (0) | 2018.06.01 |
---|---|
백준(BOJ) 2294 동전 2 ** (0) | 2018.06.01 |
백준(BOJ) 1727 커플 만들기 ** (0) | 2018.06.01 |
백준(BOJ) 2342 DDR ** (0) | 2018.06.01 |
백준(BOJ) 11062 카드게임 *** (0) | 2018.06.01 |