装进肚子(贪心)

发布时间:2024年01月23日
题目描述

自从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;						//当然这只是其中一个做法,也可以把早上的作为基准,其他自行变换即可
}

文章来源:https://blog.csdn.net/2301_81591020/article/details/135734467
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。