import java.util.*;
public class joi2019_ho_t4 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int N = scanner.nextInt();
int[][] coins = new int[2 * N][2];
for (int i = 0; i < 2 * N; i++) {
coins[i][0] = scanner.nextInt();
coins[i][1] = scanner.nextInt();
}
Arrays.sort(coins, (a, b) -> {
if (a[0] != b[0]) return Integer.compare(a[0], b[0]);
return Integer.compare(a[1], b[1]);
});
List<int[]> targetPositions = new ArrayList<>();
for (int x = 1; x <= N; x++) {
targetPositions.add(new int[]{x, 1});
targetPositions.add(new int[]{x, 2});
}
targetPositions.sort((a, b) -> {
if (a[0] != b[0]) return Integer.compare(a[0], b[0]);
return Integer.compare(a[1], b[1]);
});
long[][] dp = new long[2 * N + 1][2 * N + 1];
for (int i = 0; i <= 2 * N; i++) Arrays.fill(dp[i], Long.MAX_VALUE / 2);
dp[0][0] = 0;
for (int i = 1; i <= 2 * N; i++) {
for (int j = 1; j <= i; j++) {
int cost = Math.abs(coins[i - 1][0] - targetPositions.get(j - 1)[0]) +
Math.abs(coins[i - 1][1] - targetPositions.get(j - 1)[1]);
dp[i][j] = Math.min(dp[i - 1][j], dp[i - 1][j - 1] + cost);
}
}
System.out.println(dp[2 * N][2 * N]);
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |