公式
B - 食材の入れ替え / Swapping Ingredients 解説
by
B - 食材の入れ替え / Swapping Ingredients 解説
by
kyopro_friends
\(i\) 番目の食材を入れ替えると、おいしさの総和は \(B_i-A_i\) だけ増加します。よってこれが大きなものから \(K\) 個を入れ替えるのが最適です。
計算量は \(O(N\log N)\) です。
実装例 (C++)
#include<bits/stdc++.h>
using namespace std;
int main(){
int n, k;
cin >> n >> k;
vector<int> a(n), b(n);
for(int i=0; i<n; i++) cin >> a[i];
for(int i=0; i<n; i++) cin >> b[i];
vector<int> d(n);
for(int i=0; i<n; i++){
d[i] = b[i] - a[i];
}
sort(d.rbegin(), d.rend());
long long ans=0;
for(int i=0; i<n; i++){
ans += a[i];
}
for(int i=0; i<k; i++){
ans += d[i];
}
cout << ans << endl;
}
実装例 (Python)
N, K = map(int, input().split())
A = list(map(int, input().split()))
B = list(map(int, input().split()))
D = [B[i] - A[i] for i in range(N)]
D.sort(reverse=True)
print(sum(A) + sum(D[:K]))
投稿日時:
最終更新:
