公式

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]))

投稿日時:
最終更新: