Glory Addicts
首先如果1和0的数量相等,除初始伤害外其余全乘二即可。
否则让技能少的作为两种技能最大乘二数量。
#include <bits/stdc++.h>
typedef long long ll;
void solve() {
int n;
std::cin >> n;
std::vector<int>a(n), b(n);
std::vector<int>cnt(2);
for (int i = 0; i < n; i++) {
std::cin >> a[i];
cnt[a[i]]++;
}
for (int i = 0; i < n; i++) {
std::cin >> b[i];
}
if (cnt[0] == cnt[1]) {
ll ans = 0;
int min = b[0];
for (int i = 0; i < n; i++) {
ans += b[i];
min = std::min(b[i], min);
}
ans = 2 * ans - min;
std::cout << ans << '\n';
return ;
}
if (cnt[0] > cnt[1]) {
std::swap(cnt[0], cnt[1]);
for (int i = 0; i < n; i++) {
a[i] ^= 1;
}
}
std::vector<int> cur;
ll res = 0;
for (int i = 0; i < n; i++) {
res += b[i];
if (a[i] == 0) res += b[i];
else cur.push_back(b[i]);
}
std::sort(cur.rbegin(), cur.rend());
for (int i = 0; i < cnt[0]; i++) {
res += cur[i];
}
std::cout << res << "\n";
}
signed main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
int T;
std::cin >> T;
while (T--) {
solve();
}
return 0;
}