贪心算法_排队不等式_绝对值不等式_推公式

Posted 一只特立独行的猫

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了贪心算法_排队不等式_绝对值不等式_推公式相关的知识,希望对你有一定的参考价值。

排队不等式

原题链接

https://www.acwing.com/problem/content/915/

题目大意:

有 n 个人排队到 1 个水龙头处打水,第 i 个人装满水桶所需的时间是 ti,请问如何安排他们的打水顺序才能使所有人的等待时间之和最小?

思路:

从小到大排序,时间短的人先打水。

证明:

假设总时间为 r e s = t 1 ( n − 1 ) + t 2 ( n − 2 ) + . . . + t n ( n − n ) res = t_1(n-1)+t_2(n-2)+...+t_n(n-n) res=t1(n1)+t2(n2)+...+tn(nn),如果res是最优解,一定有 t i < = t i + 1 t_i<=t_{i+1} ti<=ti+1
反证法:
如果 t i > t i + 1 t_i>t_{i+1} ti>ti+1,交换 t i t_i ti t i + 1 t_{i+1} ti+1的打水顺序。
交换前: r e s 1 = . . . + t i ( n − i ) + t i + 1 ( n − i − 1 ) + . . . res_1 = ...+t_i(n-i)+t_{i+1}(n-i-1)+... res1=...+ti(ni)+ti+1(ni1)+...
交换后: r e s 2 = . . . + t i + 1 ( n − i ) + t i ( n − i − 1 ) + . . . res_2 = ...+t_{i+1}(n-i)+t_i(n-i-1)+... res2=...+ti+1(ni)+ti(ni1)+...
a n s = r e s 1 − r e s 2 = t i − t i + 1 > 0 ans = res1-res2=t_i-t_{i+1}>0 ans=res1res2=titi+1>0,所以交换后总时间会变少,说明 r e s 1 res_1 res1不是最优解。

代码:

#include<iostream>
#include<algorithm>

using namespace std;

typedef long long LL;

const int N = 1e5+5;

int a[N];

int main(){
    int n;
    cin>>n;
    for(int i=0;i<n;i++){
        scanf("%d",&a[i]);
    }
    
    sort(a,a+n);
    
    LL res=0;
    for(int i=0;i<n;i++){
        res+=a[i]*(n-1-i);
    }
    
    cout<<res<<endl;
    return 0;
}

绝对值不等式

原题链接

https://www.acwing.com/problem/content/106/

题目大意:

在一条数轴上有 N 家商店,它们的坐标分别为 A 1 ∼ A N A_1∼A_N A1AN
现在需要在数轴上建立一家货仓,每天清晨,从货仓到每家商店都要运送一车商品。
为了提高效率,求把货仓建在何处,可以使得货仓到每家商店的距离之和最小。

思路:

找n个点的中位数,这个数就是距离的最小值点。

证明:

r e s = ∣ x 1 − x 0 ∣ + ∣ x 2 − x 0 ∣ + . . . + ∣ x 1 − x n ∣ , x i res=|x_1-x_0|+|x_2-x_0|+...+|x_1-x_n|,x_i res=x1x0+x2x0+...+x1xn,xi表示商店位置 ( x i < x i + 1 ) (x_i<x_{i+1}) (xi<xi+1) x 0 x_0 x0表示货仓的位置。
若商店数量为偶数家: r e s = ( ∣ x 1 − x 0 ∣ + ∣ x n − x 0 ∣ ) + . . . + ( ∣ x n 2 − x n ∣ + ∣ x n + 1 2 ∣ ) res=(|x_1-x_0|+|x_n-x_0|)+...+(|x_{\\frac n 2}-x_n|+|x_{\\frac {n+1}2}|) res=(x1x0+xnx0)+...+(x2nxn+x2n+1)
若商店数量为奇数家: r e s = ( ∣ x 1 − x 0 ∣ + ∣ x n − x 0 ∣ ) + . . . + ∣ x n 2 − x 0 ∣ res=(|x_1-x_0|+|x_n-x_0|)+...+|x_{\\frac n 2}-x_0| res=(x1x0+xnx0)+...+x2nACM - 贪心(经典母题+POJ一些练习题)

ACM - 贪心(经典母题+POJ一些练习题)

ACM - 贪心(经典母题+POJ一些练习题)

递推方程的求解

CodeChef - NWAYS 组合数 朱世杰恒等式

最优化理论与技术