随手练—— 洛谷-P2945 Sand Castle(贪心)

题目链接:https://www.luogu.org/problemnew/show/P2945 (原题 USACO)

要求钱最少,就是试着让M和B的离散程度最小(我自己脑补的,就是总体更接近,我不知道数学上这样该不该叫离散程度),那显而易见就是升序。

一开始想着可能有这种情况,有高度相同,但是对不上的,其实是没有差别的。

原高度:2 2 3 4 5

改高度:2 3 4 5 6

证明看这个:https://www.cnblogs.com/Leohh/p/7648607.html

#include<iostream>
#include<algorithm>
using namespace std;

 
int main()
{
    int res = 0 , N, X, Y;
    int *M, *B;
    cin >> N >> X >> Y;
    M = new int[N]; B = new int[N];
    for (int i = 0; i < N; i++)  cin >> M[i] >> B[i];
    sort(M, M + N);  
    sort(B, B + N);  
    for (int i = 0; i < N; i++){
        if (M[i] < B[i])  res += (B[i] - M[i])*X;  
        else  res += (M[i] - B[i])*Y;  
    }
    cout << res << endl;
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/czc1999/p/10360466.html