洛谷 P1632 点的移动

洛谷 P1632 点的移动

一、题目大意

求平面上 12n 个点的曼哈顿距离的最小值。

二、解题思路

枚举,我们假设 m 个点的最小曼哈顿距离,我们假设汇集的点是 (x,y) ,则
x 必然可以选择 n 个点的横坐标中的一个, y 也可以选 n 个点的纵坐标中的一个。
所以我们枚举 xy 然后求距离即可。

三、Code

#include <bits/stdc++.h>
using namespace std;
const int N = 110;
int n, x[N], y[N], dist[N], ans[N];

int main() {
    cin >> n;
    for (int i = 0; i < n; i++) cin >> x[i] >> y[i];
    memset(ans, 0x3f, sizeof ans);

    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) { // 双重循环枚举每个已知的点
            int X = x[i];             // 假设最终的结果是这个X
            int Y = y[j];             // 假设最终的结果是这个Y

            // 计算每个点到(X,Y)的汉密尔顿距离
            for (int k = 0; k < n; k++)
                dist[k] = abs(x[k] - X) + abs(y[k] - Y);

            // 由小到大排序
            sort(dist, dist + n);

            int cnt = 0;
            for (int k = 0; k < n; k++) {
                cnt += dist[k]; // 累加每一个限定范围的最小距离和
                ans[k] = min(ans[k], cnt);
            }
        }
    }
    // 输出答案
    for (int i = 0; i < n; i++) printf("%d\n", ans[i]);
    return 0;
}

posted @   糖豆爸爸  阅读(41)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
历史上的今天:
2022-09-19 哈夫曼编码HuffmanCoding原理详解
2022-09-19 22张图带你深入剖析前缀、中缀、后缀表达式以及表达式求值
2021-09-19 P2615 神奇的幻方
2016-09-19 关于云主机拷贝复制资源异常的处理办法
Live2D
点击右上角即可分享
微信分享提示