http://codeforces.com/contest/779/problem/C
$n$個のもの全てを今週と来週に分けて買いたい.$i$番目の今週の値段は$a_i$で,来週の値段は$b_i$である.少なくとも今週に$k$個買わなければならない時に,必要となる最小の金額を求める.
基本的に来週になると高くなるものは今週買い,安くなるものは来週買った方が良い.今週買った方が良いものが$k$個未満の場合は,来週買った方が良いものから安くなる金額が少ない順に買う.
#include <bits/stdc++.h>
#define rep(i,n) for(int i=0;i<(int)(n);i++)
#define REP(i,k,n) for(int i=k;i<(int)(n);i++)
#define each(it,v) for(__typeof((v).begin()) it=(v).begin();it!=(v).end();it++)
#define INF 1<<30
#define mp make_pair
#define fi first
#define se second
using namespace std;
typedef long long ll;
typedef pair<int,int> P;
bool flag[200005];
int main() {
int n, k;
cin >> n >> k;
vector<P> v(n);
rep(i, n) cin >> v[i].fi;
rep(i, n) cin >> v[i].se;
memset(flag, 0, sizeof(flag));
priority_queue<P, vector<P>, greater<P> > que;
rep(i, n) {
if(v[i].fi - v[i].se > 0) {
que.push(mp(v[i].fi - v[i].se, i));
flag[i] = true;
}
}
int now = n - que.size();
while(now < k) {
P p = que.top(); que.pop();
now++;
flag[p.se] = false;
}
ll ans = 0;
rep(i, n) {
if(flag[i]) ans += v[i].se;
else ans += v[i].fi;
}
cout << ans << endl;
return 0;
}