题目描述

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门课时所有课程熟练度总和的最大值


样例数据

输入

3 2
19 4 5
2 6 2

输出

27

备注

数据范围:
$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;
}

信息

时间限制: 2s
内存限制: 256MB
评测模式: Normal

导航

比赛介绍
比赛排名
数据统计
评测状态
答疑平台
打印服务