【Acwingアルゴリズム基礎講座】第6章 欲張り~絶対値不等式~104.倉庫位置選定

質問: 104. 倉庫の場所の選択 - AcWing 質問バンク

アイデア:

  1. すべてのポイントが並べ替えられました

  2. 偶数の場合は、中点2点間の倉庫を取ることで最小値を求めることができます。

  3. 奇数の場合は、倉庫から中央値を取得するだけです。

証明方法:

上記のアプローチが正しいのはなぜですか? -- 絶対値の不等式が使用されます。

        f(x) =|xn - x| + |xn-1 - x| + |xn-2 - x| + ... |x1-x|

        >= |xn - x1| + |xn-1 - x2| + ...

        最小値は xn - x1 + xn-1 - x2 + ... です。

        奇数は中央値、偶数は 2 つの中間点の間、または中央値 (a[n/2]) になります。要約すると、奇数でも偶数でも、すべての倉庫を計算できます。中央値と最小値を取得する

解決策: AcWing 104. 倉庫の場所の選択 (冬休み中は 1 日 1 問) - AcWing

理解できない場合は、ビデオを見てください、非常に明確です

コード:

#include <iostream>
#include <algorithm>
//贪心 绝对值不等式 104.货仓选址
using namespace std;

const int N = 100010;

int n;
int a[N];

int main()
{
    scanf("%d", &n);//输入点个数
    for(int i = 0; i < n; i++) scanf("%d", &a[i]);//输入点坐标

    sort(a, a + n);

    int res = 0;
    for(int i = 0; i < n; i++) res += abs(a[i] - a[n / 2]);//循环n个, |a[i] - 中位数|

    printf("%d\n", res);
    return 0;
}

おすすめ

転載: blog.csdn.net/weixin_65293439/article/details/128462654