ABC360_C题 Move It
题意
N N N 件物品初始在某些盒子里面,之后要求每个盒子里面恰有一件物品,代价与重量相关。
分析
显然,移动次数越多,代价越大。贪心的考虑,应该尽可能少的移动。
那么,需要移动的话,考虑一步到位,直接从有多余的物品的盒子里面拿到目标盒子。
为了让代价尽可能少,拿出的物品一定是重量最轻的几件。即留下最重的一件。
在实现细节上,由于每个盒子物品数量不确定,因此考虑使用 vector,并进行排序即可 。
code:
#include <bits/stdc++.h>
using namespace std;
int n;
int main() {
cin >> n;
vector<int> a(n);
for (int i = 0; i < n; i++) {
cin >> a[i];
a[i]--;
}
vector<int> w(n);
for (int i = 0; i < n; i++) {
cin >> w[i];
}
vector<int> b(n, 0);
for (int i = 0; i < n; i++) {
b[a[i]] = max(b[a[i]], w[i]);
}
int s = 0;
for (int i = 0; i < n; i++) {
s += w[i];
s -= b[i];
}
cout << s << endl;
return 0;
}