装进肚子(贪心)

题目描述

自从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能获得的最大甜蜜值。

样例输入 Copy
2 1
3 6
2 8
样例输出 Copy
11
提示

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

代码实现:

#pragma GCC optimize(2)
#pragma GCC optimize(3)
#include<bits/stdc++.h>
using namespace std;
long long a[100005],b[100005],c[100005];
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);  
	int n,k;
	long long sum=0;
	cin>>n>>k;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
	}
	for(int i=1;i<=n;i++)
	{
		cin>>b[i];
		sum+=b[i];					//我们把晚上的甜蜜值作为基准,先初步获得一个sum
	}
	for(int i=1;i<=n;i++)
	{
		c[i]=a[i]-b[i];				//每一颗巧克力早晚吃对应的差值
	}
	sort(c+1,c+n+1,greater<int>());	//对数组c进行降序排序
	for(int i=1;i<=k;i++)
	{
		sum+=c[i];					//取数组c前k项与初步得到的sum进行累加
	}
	cout<<sum<<endl;
	return 0;						//当然这只是其中一个做法,也可以把早上的作为基准,其他自行变换即可
}

相关推荐

  1. 肚子贪心

    2024-01-23 19:32:01       37 阅读
  2. X制减法(贪心算法C++实现)

    2024-01-23 19:32:01       18 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-23 19:32:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-23 19:32:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-23 19:32:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-23 19:32:01       20 阅读

热门阅读

  1. linux信号处理机制

    2024-01-23 19:32:01       32 阅读
  2. YOLOv8加入AIFI模块,附带项目源码链接

    2024-01-23 19:32:01       43 阅读
  3. 软件测试零基础快速入门(2024版)

    2024-01-23 19:32:01       39 阅读
  4. QT笔记 - QRegularExpression正则表达式

    2024-01-23 19:32:01       34 阅读
  5. Android 基于Fragment的权限封装

    2024-01-23 19:32:01       35 阅读
  6. 今日前端十个知识点——CSS篇(一)

    2024-01-23 19:32:01       33 阅读
  7. 同步和异步的区别?

    2024-01-23 19:32:01       26 阅读