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

跳板问题(贪心算法+细节思考)

首先直接看题:

 这题直接贪心其实问题不大:

下面先展示我的一个错误代码:

# include<iostream>
# include<vector>
# include<algorithm>using namespace std;int main()
{int N,M;cin>>N>>M;vector<vector<int>> arr(N,vector<int>(2));for(int i=0;i<N;i++){cin>>arr[i][0]>>arr[i][1];}// 感觉贪心应该就能解决int distance = 0;int step = 0;int i = 0;// 可能少考虑了一点while(distance<=M){if(distance<=arr[i][0]){step+=arr[i][0]-distance;distance = arr[i][0]+arr[i][1];}else if(distance>arr[i][0]){i++;if(i>=N){step+=M-distance;break;}}}cout<<step<<endl;return 0;
}

其实整体思路是没有问题的,

但题目里面有一个细节,就是说“每个跳板能够将胡同学发射到一定距离内的任意位置。“

这时候问题就来了,比如距离起点为5,能跳长度为6的这样一个板,它在5-11之间还是会有其他的跳板,所以,在5-11他也不需要自行走路,因为他目前的跳板可以把他送到5-11范围内的任意位置,那么如果有这样一个跳板,距离起点7,跳板长度是10,那么借助这个跳板就可以直接达到17这个位置,这是之前代码没有考虑到的,之前的代码直接是认为做上5跳板,到达的位置就是11,这就是问题所在,所以i++的过程中需要进行一个判断。

所以最终代码就是:

# include<iostream>
# include<vector>
# include<algorithm>using namespace std;int main()
{int N,M;cin>>N>>M;vector<vector<int>> arr(N,vector<int>(2));for(int i=0;i<N;i++){cin>>arr[i][0]>>arr[i][1];}// 感觉贪心应该就能解决int distance = 0;int step = 0;int i = 0;// 可能少考虑了一点int current_pos = 0;while(distance<M&&i<N){if(current_pos<=arr[i][0]){step+=arr[i][0]-distance;current_pos = arr[i][0];}distance = arr[i][0]+arr[i][1]; // 前一个跳板能达到的最远距离if(distance>current_pos){current_pos = distance;}i++;}if(current_pos<M){step+=M-current_pos;}cout<<step<<endl;return 0;
}

最主要的点就是一个比较。

http://www.lryc.cn/news/2386619.html

相关文章:

  • RuoYi前后端分离框架集成UEditorPlus富文本编辑器
  • IPD流程落地:项目任务书Charter开发
  • Vue 2 混入 (Mixins) 的详细使用指南
  • day020-sed和find
  • OpenGL Chan视频学习-4 Vertex Buffers and Drawing a Triangle in OpenGL
  • 数据库事务的四大特性(ACID)
  • 网络安全全知识图谱:威胁、防护、管理与发展趋势详解
  • FreeRTOS 在物联网传感器节点的应用:低功耗实时数据采集与传输方案
  • 解决 iTerm2 中 nvm 不生效的问题(Mac 环境)
  • Linux环境下基于Docker安装 PostgreSQL数据库并配置 pgvector
  • (9)-java+ selenium->元素定位之By name
  • 深浅拷贝?
  • Beckhoff PLC 功能块 FB_CTRL_ACTUAL_VALUE_FILTER (模拟量滤波)
  • Mysql在SQL层面的优化
  • JVM规范之栈帧
  • 【C++指南】string(四):编码
  • 深度学习之序列建模的核心技术:LSTM架构深度解析与优化策略
  • AI量化交易是什么?它是如何重塑金融世界的?
  • 分布式事务处理方案
  • CVE-2024-36467 Zabbix权限提升
  • Dify中的自定义模型插件开发例子:以xinference为例
  • crud方法命名示例
  • 尚硅谷redis7 33-36 redis持久化之RDB优缺点及数据丢失案例
  • No such file or directory: ‘ffprobe‘
  • 计算机网络-WebSocket/DNS/Cookie/Session/Token/Jwt/Nginx
  • 功能“递归模式”在 C# 7.3 中不可用,请使用 8.0 或更高的语言版本的一种兼容处理方案
  • 第4章-操作系统知识
  • 将网页带格式转化为PDF
  • 【ArcGIS】ArcGIS AI 助手----复现
  • 使用 FFmpeg 将视频转换为高质量 GIF(保留原始尺寸和帧率)