Acwing104. 货仓选址:贪心(绝对值不等式)
文章目錄
- 題目分析
- 題目鏈接
題目分析
原題:
在一條數軸上有 N 家商店,它們的坐標分別為 A1~AN。
現在需要在數軸上建立一家貨倉,每天清晨,從貨倉到每家商店都要運送一車商品。
為了提高效率,求把貨倉建在何處,可以使得貨倉到每家商店的距離之和最小。
分析:
分別是各個地點為x1,x2,...xk,...xnx_1,x_2,...x_k,...x_nx1?,x2?,...xk?,...xn?,倉庫地址為x,則距離之和為
d=∣x1?x∣+∣x2?x∣+...+∣xk?x∣+...+∣xn?x∣使之最小d=|x_1-x|+|x_2-x|+...+|x_k-x|+...+|x_n-x|使之最小d=∣x1??x∣+∣x2??x∣+...+∣xk??x∣+...+∣xn??x∣使之最小
這個證明需要用到分組的思想,頭和尾是一組,依次往里頭和尾結合。
d=(∣x1?x∣+∣xn?x∣)+(∣x2?x∣+∣xn?1?x∣)+...+兩兩一組d=(|x_1-x|+|x_n-x|)+(|x_2-x|+|x_{n-1}-x|)+...+兩兩一組d=(∣x1??x∣+∣xn??x∣)+(∣x2??x∣+∣xn?1??x∣)+...+兩兩一組
然后用到 ∣x?a∣+∣x?b∣≥b?a|x-a|+|x-b|≥b-a∣x?a∣+∣x?b∣≥b?a求最小值的思路,當x介于a,b之間的時候取最小值(絕對值的幾何意義)。 上面的d最后的最小值就是在每一組的之間(x1,xn),(x2,xn?1)...(x_1,x_n),(x_2,x_{n-1})...(x1?,xn?),(x2?,xn?1?)...如果要同時滿足,x只能落在最中間的那個區間或者中位數。
先排序,放在中位數的位置 a[n/2]。
ac代碼
#include<bits/stdc++.h> using namespace std;const int N= 100010; int a[N];int n;int main(){cin>>n;for(int i=0;i<n;i++) cin>>a[i];sort(a,a+n);int res=0;for(int i=0;i<n;i++) res+=abs(a[i]-a[n/2]); //放在中位數的位置cout<<res<<endl;}題目鏈接
Acwing104. 貨倉選址
總結
以上是生活随笔為你收集整理的Acwing104. 货仓选址:贪心(绝对值不等式)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Leetcode1702. 修改后的最大
- 下一篇: Leetcode1703. 得到连续 K