Submission #1147331

#TimeUsernameProblemLanguageResultExecution timeMemory
1147331leo12345Coin Collecting (JOI19_ho_t4)Java
0 / 100
87 ms13016 KiB
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, Comparator.comparingInt(a -> a[0]));

        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(Comparator.comparingInt(a -> a[0]));

        long[][] dp = new long[2 * N + 1][2 * N + 1];
        for (int i = 1; i <= 2 * N; i++) dp[i][0] = Long.MAX_VALUE / 2;
        for (int j = 1; j <= 2 * N; j++) dp[0][j] = Long.MAX_VALUE / 2;

        for (int i = 1; i <= 2 * N; i++) {
            for (int j = 1; j <= 2 * N; 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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...