当前位置: 首页 > news >正文

洛谷P3817题解:贪心算法解决糖果分配问题

截图未命名.jpg 洛谷P3817题解:贪心算法解决糖果分配问题 贪心算法 算法竞赛 分糖果问题 C++ 洛谷题解 第1张

一、问题分析

题目描述了一个有n盒糖果的序列,每盒有a[i]颗糖果。要求相邻两盒糖果的总和不能超过x,需要通过吃掉最少数量的糖果来满足这个条件。

二、解题思路

  1. ‌贪心算法‌:每次处理相邻两盒糖果时,优先处理后面的盒子,因为这样可以影响下一对相邻盒子的计算

  2. ‌局部最优‌:对于每对相邻盒子,计算超出x的部分,优先从后一盒吃掉糖果

  3. ‌全局最优‌:通过局部最优的选择,最终达到全局最优解(吃掉最少糖果)

三、关键算法详解

1. 输入处理
int n, x;
cin >> n >> x;vector<int> a(n);for (int i = 0; i < n; ++i) {cin >> a[i];
}

读取糖果盒数量和限制值x,然后读取每盒糖果的数量。

2. 贪心处理相邻盒子
for (int i = 1; i < n; ++i) {    if (a[i-1] + a[i] > x) {        int need_to_eat = a[i-1] + a[i] - x;        int can_eat = min(need_to_eat, a[i]);a[i] -= can_eat;        if (can_eat < need_to_eat) {a[i-1] -= (need_to_eat - can_eat);}total_eaten += need_to_eat;}
}

核心贪心逻辑:对于每对相邻盒子,计算超出部分,优先从后一盒吃掉糖果,如果还不够再吃前一盒的。

四、完整代码

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;int main() {int n, x;cin >> n >> x;vector<int> a(n);for (int i = 0; i < n; ++i) {cin >> a[i];}long long total_eaten = 0;// 从左到右处理相邻盒子for (int i = 1; i < n; ++i) {if (a[i-1] + a[i] > x) {// 计算需要吃掉的糖果数int need_to_eat = a[i-1] + a[i] - x;// 优先吃当前盒子的糖果,因为可以影响下一对int can_eat = min(need_to_eat, a[i]);a[i] -= can_eat;// 如果还不够,再吃前一个盒子的if (can_eat < need_to_eat) {a[i-1] -= (need_to_eat - can_eat);}total_eaten += need_to_eat;}}cout << total_eaten << endl;return 0;
}

来源:洛谷P3817题解:贪心算法解决糖果分配问题

http://www.dtcms.com/a/332962.html

相关文章:

  • Rust学习笔记(三)|所有权机制 Ownership
  • fpga高速接口汇总整理
  • vue3 app.use()的作用
  • 功能组状态变更能否跨越功能组边界
  • 【递归、搜索与回溯算法】DFS解决FloodFill算法
  • Python subprocess.Popen 打开第三方程序
  • 鸿蒙ArkUI动画实战:TransitionEffect实现元素显隐过渡
  • 启动electron桌面项目控制台输出中文时乱码解决
  • 基于.net、C#、asp.net、vs的保护大自然网站的设计与实现
  • 深度解读 Browser-Use:让 AI 驱动浏览器自动化成为可能
  • 【微服务】.NET8对接ElasticSearch
  • Webapi发布后IIS超时(.net8.0)
  • 后台管理系统-2-vue3之路由配置和Main组件的初步搭建布局
  • 记一次impala的kerberos的配置信息
  • 什么是主网切换
  • DAY41打卡
  • 附045.Kubernetes_v1.33.2高可用部署架构二
  • Web攻防-大模型应用LLM安全提示词注入不安全输出代码注入直接间接数据投毒
  • 稳定且高效:GSPO如何革新大型语言模型的强化学习训练?
  • vue3相关基础
  • kubernetes(序)
  • 从前端框架到GIS开发系列课程(26)在mapbox中实现地球自转效果,并添加点击事件增强地图交互性
  • 超级云 APP 模式:重构移动互联网生态的新引擎
  • 开机自启脚本报错 which: no java in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin)
  • 区块链技术原理(12)-以太坊区块
  • 无人机光电探测模块技术分析
  • 39 C++ STL模板库8-容器1-array
  • 【Java】HashMap的详细介绍
  • uniApp App 端日志本地存储方案:实现可靠的日志记录功能
  • Python 高级语法与用法详解 —— 提升编程效率与代码质量