题目链接: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; }