A - 汽车加油问题
Description
一辆汽车加满油后可行驶n公里。旅途中有若干个加油站。设计一个有效算法,指出应在哪些加油站停靠加油,使沿途加油次数最少。并证明算法能产生一个最优解。
对于给定的n和k个加油站位置,计算最少加油次数。
Input
输入数据的第一行有2 个正整数n和k(n≤5000,k≤1000),表示汽车加满油后可行驶n公里,且旅途中有k个加油站。接下来的1 行中,有k+1 个整数,表示第k个加油站与第k-1 个加油站之间的距离。第0 个加油站表示出发地,汽车已加满油。第k+1 个加油站表示目的地。
Output
将计算出的最少加油次数输出。如果无法到达目的地,则输出“No Solution!”。
Sample
Input
7 7
1 2 3 4 5 1 6 6
Output
4
题解:
比较当前剩余油量能不能达到下一个加油站,能就不用停,不能就加满,然后再去下一个加油站。
注意,每到一个加油站,油箱的中的油都要减去这段距离的消耗,如果变为负数,则说明无法到达当前加油站。
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std;
/**
*maxn当前数组最大值。
*/
int maxn = 1050;
int main()
{
/**
*n加油站的数量。
*k油箱能跑的距离。
*/
int k,n;
/**
*dis存储每个加油站到之前加油站的距离。
*a当前油箱的剩余。
*num停下加油的次数。
*/
int i,dis[maxn],a,num;
scanf("%d%d",&k,&n);
//由于目的地也算一个点,所以实际输入为n+1个数据。
for(i=0;i<=n;i++)
scanf("%d",&dis[i]);
a = k;
num = 0;
for(i=0;i<n;i++){
a -= dis[i];
if(a<0)
break;
if(a - dis[i + 1] < 0)
{
a = k;
num++;
}
}
//说明能够到达目的地。
if(i==n)
printf("%d\n",num);
//无法到达目的地。
else
printf("No Solution!\n");
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
2018-10-20 HDU-1114_Piggy-Bank
2018-10-20 HDU_1087-Super Jumping! Jumping! Jumping!