惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

GbyAI
GbyAI
WordPress大学
WordPress大学
D
DataBreaches.Net
腾讯CDC
小众软件
小众软件
B
Blog RSS Feed
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
T
The Blog of Author Tim Ferriss
MongoDB | Blog
MongoDB | Blog
U
Unit 42
Y
Y Combinator Blog
V
V2EX
I
InfoQ
D
Docker
量子位
N
Netflix TechBlog - Medium
Recent Announcements
Recent Announcements
A
About on SuperTechFans
博客园 - 叶小钗
大猫的无限游戏
大猫的无限游戏
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
B
Blog
阮一峰的网络日志
阮一峰的网络日志
MyScale Blog
MyScale Blog

博客园 - 糖豆爸爸

【树上DP前导知识汇总】 快速幂、龟速乘总结 反向建图+拓扑排序 卡特兰数专题(Catalan) AcWing 126. 最大的和 AcWing 431. 守望者的逃离 AcWing 414. 数字游戏 AcWing 468. 魔法阵 AcWing 463. 求和 P1056 NOIP2008 普及组 排座椅 洛谷 P1889 士兵站队 洛谷 P1862 输油管道问题 CF444C DZY Loves Colors P2253 好一个一中腰鼓! SCOI2010 P2572 序列操作 P4344 SHOI2015 脑洞治疗仪 T125847 【模板】动态开点线段树 P3373 【模板】线段树 2 Physical Education Lessons
洛谷 P1632 点的移动
糖豆爸爸 · 2023-09-19 · via 博客园 - 糖豆爸爸

洛谷 \(P1632\) 点的移动

一、题目大意

求平面上 \(1、2⋯n\) 个点的曼哈顿距离的最小值。

二、解题思路

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

三、\(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;
}