cpp算法题目整理——贪心篇2

发布时间:2026/10/18 14:53:23
cpp算法题目整理——贪心篇2 最短距离题目描述在一条一维的直线上存在着 n 台显示器和 n 个电源插座。老师给小蓝布置了个任务负责将每台显示器通过电源线与一个插座相连接每个插座最多只能给一台显示器供电同时老师希望所消耗的电源线的长度尽可能的少请你帮小蓝计算下电源线的最小消耗长度为多少为了便于计算你只需要考虑直线距离即可。解题思路贪心思路序号最小的显示器连接序号最小的插座这样下来最终的距离一定是最小用vector定义两个long long数组分别存储显示器序号和插座序号使用vetcor能够直接调用sort进行排序即sort(x.begin(),x.end()); 然后让对应位置的x[i] y[i] 相减并取绝对值即可累加到distance上输出。#include iostream #include vector #include cmath #include algorithm using namespace std; int main(){ int n; cin n; //定义两个vector 后边可以用来直接排序 vectorlong long x(n); vectorlong long y(n); //分别输入显示器和插座的位置 for(int i 0; i n; i){ cin x[i]; } for(int i 0; i n; i){ cin y[i]; } //位置最小的显示器连接位置最小的插座 这样一定是最小 long long dis 0; //对显示器和插座分别排序确保最小对应最小 sort(x.begin(),x.end()); sort(y.begin(),y.end()); //注意要用绝对值 for(int i 0; i n; i){ dis abs(x[i] - y[i]); } cout dis endl; return 0; }画展布置题目描述解题思路这个题目主要是用滑动窗口解决即去遍历排好序的vector看看长度为m的序列那个满足最小的要求为什么只用最后一项减去第一项呢 这个涉及到一个数学公式把这个式子展开之后满足裂项相消能够简化计算步骤消掉之后就只剩下最后一项的平方减去第一项的平方减少计算量然后遍历长度为m的窗口取最小值输出就行了。 为什么要用滑动窗口呢因为对于有些连续的数字他的平方差比看起来小的数字更小比如11011121000如果取前三项最小的那平方之后相减就是120但是如果选择101112那相减之后就是44所以才要用滑动窗口遍历整个数组找到最小的值。#include iostream #include vector #include algorithm using namespace std; int main(){ int n, m; cin n m; //定义vector方便排序 vectorlong long x(n); for(int i 0; i n; i){ cin x[i]; } //从小到大排序 sort(x.begin(), x.end()); //初始化l 最好的情况就是这个值 long long l x[m - 1] * x[m - 1] - x[0] * x[0]; //滑动窗口 长度为m //遍历长度为m的序列 取cur和l的最小值 for(int i 0; i n - m; i){ long long cur x[i m - 1] * x[i m - 1] - x[i] * x[i]; l min(cur, l); } cout l endl; return 0; }

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询