Jimmy作为一名SCUT的大学生,自然需要去学习。
在SCUT,Jimmy的课表上有N门不同的课程,在学期的每一周内他总共会上N次课,每一门课程恰好一周上一次课,Jimmy对于每一个课程都有一个熟练度,初始时都为0。
对于一节课Jimmy可以选择如下两种选项之一:
1.去上课:如果Jimmy选择去上课,此时他对于这节课的熟练度增加$A_i$。
2.翘课:Jimmy热爱学习,因此他会在翘课的时候找地方自学,此时他对于这节课的熟练度增加$B_i$。
为了去学习更多的课外知识,Jimmy不会在其余时间学习这N门课程,但是他又不想要让自己的成绩排名靠后,于是他找到了你,请你帮忙让他在每周恰好翘k门课时,他所有课程熟练度总和尽可能大。
第一行两个整数N, k
接下来一行N个整数$A_i$。
接下来一行N个整数$B_i$。
仅输出一行一个整数,表示Jimmy在每周恰好翘k门课时所有课程熟练度总和的最大值
数据范围:
$1 \leq N \leq 10^7,0 \leq k \leq N, 0 \leq A_i \leq 10^8, 0 \leq B_i \leq 10^8 $
样例解释:
Jimmy可以选择翘第2次课和第3次课,此时他的所有课程熟练度总和为27,是最优方案。
提示:
本题数据量较大,请采用以下的read()函数读取数据:
int read() {
int x = 0;
char c = getchar();
while (c < '0' || c > '9') {
c = getchar();
}
while (c >= '0' && c <= '9') {
x = x * 10 + c - '0';
c = getchar();
}
return x;
}
例如:
#include <iostream>
using namespace std;
int read() {
int x = 0;
char c = getchar();
while (c < '0' || c > '9') {
c = getchar();
}
while (c >= '0' && c <= '9') {
x = x * 10 + c - '0';
c = getchar();
}
return x;
}
int main() {
int a, b;
a = read(), b = read();
cout << a + b;
return 0;
}