题解|装进肚子
由于题目链接无法解析,我直接截图展示这个题目要求找到最大甜蜜值的思路其实也很简单。
我们可以先假设所有的巧克力都应该在晚上吃,然后再挑出 k 个巧克力转为早上吃。
那么我们只需要计算出这 n 个巧克力在分别早晚的甜蜜值差值 A[i]-B[i],并进行排序,差值最大的 k 个巧克力在早上吃,代表着这 k 个巧克力可以提供更多的甜蜜值增益。
#include<iostream>
#include<algorithm>
#include<vector>
#include<stack>
#include<queue>
#include<deque>
#include<cmath>
using namespace std;
const int N=100005;
int main(){
int n=0,k=0;
cin>>n>>k;
int A[N],B[N];
for(int i=0;i<n;i++) cin>>A[i];
for(int i=0;i<n;i++) cin>>B[i];
vector<int> ve;
long long sum=0;
for(int i=0;i<n;i++){
ve.push_back(A[i]-B[i]); //计算早晚甜蜜值差值
sum+=B[i]; //同时对B值进行累加
}
sort(ve.begin(),ve.end(),greater<int>()); //用sort函数进行降序排序
for(int i=0;i<k;i++) sum+=ve[i]; //差值最大的k个再累加到sum上
cout<<sum;
return 0;
}
查看7道真题和解析