当前位置: 首页> 财经> 股票 > 电子简历模板_编程培训机构名字_品牌推广文案_微商怎么引流被别人加

电子简历模板_编程培训机构名字_品牌推广文案_微商怎么引流被别人加

时间:2025/8/23 21:28:00来源:https://blog.csdn.net/qq_62172019/article/details/144978995 浏览次数:1次
电子简历模板_编程培训机构名字_品牌推广文案_微商怎么引流被别人加

题目如下
在这里插入图片描述
数据范围
在这里插入图片描述
示例
在这里插入图片描述

题目的意思是将一个长度为n的数组weight(简称w)分成k个小数组,同时计算这些小数组的边界和。
设i (0 <= i <= n - 1)
首先我们假设已经找到最大分数序列即划分的小数组最优 令 j1,j2,j3.....jk为这些小数组的左端点(不包括第一个小数组)。
则有
max = (w[0] +  w[j1 - 1])  + (w[j1] + w[j2 - 1]) + (w[j2] + w[j3 - 1]) + ....... +
+ (w[jk] + w[n - 1])
同理
min = w[0] + .... + w[n - 1]
ans = max - min
可以看出真正影响结果的是排除w[0]和w[n - 1]之后的和。
显然排除w[0],w[n - 1]得到的是相邻两点之和总数k - 1 。
所以本题转换为求最大k - 1个的相邻和减去最小k - 1的相邻和。
如果不理解可以随便构造一个数组任取k - 1个相邻和加上首项和尾项看看是不是能写成k个区间,显然是可以的。
所以本题只需要将数组相邻和求出来排序就能得到答案。

通过代码

class Solution {
public:long long putMarbles(vector<int>& weights, int k) {int n = weights.size();long long min = 0,max = 0;if(n == k)return 0;vector<int> sum;for(int i = 1;i < n;i++)sum.push_back(weights[i] + weights[i - 1]);sort(sum.begin(),sum.end());k--;for(int i = 0;i < k;i++)min += sum[i];for(int i = n - 2;i > n - k - 2;i--)max += sum[i];return max - min;}
};

在这里插入图片描述

关键字:电子简历模板_编程培训机构名字_品牌推广文案_微商怎么引流被别人加

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: