您的位置:首页 > 理论基础 > 计算机网络

2017年西南民族大学程序设计竞赛-网络同步赛 C 装进肚子【贪心】

2017-12-30 18:53 169 查看

C 装进肚子

题目描述

自从ZZZZone吃完糖果后,他开始改吃巧克力了,他每天想吃n个巧克力增在甜蜜值,他决定早上吃K个巧克力,晚上吃n - K个巧克力,每个巧克力在早上吃和在晚上吃的甜蜜值是不一样的,他想让自己得到的甜蜜值最大,并想知道最大是多少。

请你编程帮助他。

输入描述:

第一行包含两个数n,K表示每天要吃的巧克力数量和要在早上吃的数量。(n <= 100000, K <= n)

第二行包含n个整数Ai(1 <= i <= n) 表示个第i个巧克力在早上吃可得到的甜蜜值 (Ai <= 100000)

第三行包含n个整数Bi(1 <= i <= n) 表示个第i个巧克力在晚上吃可得到的甜蜜值 (Bi <= 100000)

输出描述:

输出仅一行包含一个整数表示ZZZZone能获得的最大甜蜜值。

示例1

输入

2 1

3 6

2 8

输出

11

说明

早上吃第一个巧克力得到3甜蜜值,晚上吃第2个巧克力得到8的甜蜜值,所以最大可得到11的甜蜜值。

题意: 给你天数,和第i天上午和下午的甜蜜值,让你选择那天上午吃,或下午吃,使得得到的甜蜜值最大

分析: 贪心的按照差值来排序,即可,考虑前k个数只需要前 差值最大的 即可,后面的都是下午来选即可

参考代码

#include<bits/stdc++.h>

using namespace std;
const int maxn = 1e5 + 10;
typedef long long ll;
struct S {
ll a,b;
}a[100010];
ll res;

bool cmp(S x, S y) {
int t1 = x.a - x.b;
int t2 = y.a - y.b;
return t1 > t2;
}
int main(){
int n,k;cin>>n>>k;
for(int i = 0;i < n;i++) cin>>a[i].a;
for(int i = 0;i < n;i++) cin>>a[i].b;
sort(a,a+n,cmp);
for(int i = 0;i < k;i++) res += a[i].a;
for(int i = k;i < n;i++) res += a[i].b;
cout<<res<<endl;
return 0;
}


如有错误或遗漏,请私聊下UP,ths
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐