PAT甲级1033 To Fill or Not to Fill (贪心算法),一招彻底弄懂

文章讲述了如何使用贪心算法设计一个程序,通过计算从起点出发到目的地的最经济加油策略,即选择行驶过程中遇到的第一个比当前油站价格更低的站或价格最低的站。涉及到数组、递归函数和判断汽车如何根据油价变化加油。
摘要由CSDN通过智能技术生成
  1. 本题的核心思想就是尽量使用最便宜的油行驶。所以我们建立一个数组cheapSta[500],cheapSta[i]表示从加油站i出发在满油行驶距离之内的第一个比当前油站价格更低的站或者价格最低的油站。这个数组也代表了行驶线路。

  2. 建立递归函数Travel()。路线既然确定好了,那么我们需要判断汽车怎么加油。根据贪心算法的思想,汽车应尽量使用便宜的油。如果下一站cheapSta[cur_sta]的油价比当前站cur_sta更低,那么油量应使得汽车刚好开到cheapSta[i]站(油够用则不用加,否则将油加到刚好的量);如果下一站cheapSta[cur_sta]的油价比当前站更高,那么应该加满油。

  3. 注意:汽车开始时油箱没有油,若没有距离为0的加油站,直接输出最大距离0.00。

示例代码

#include

#include

#include

#define MAX 2147483647;

using namespace std;

int Cmax, D, Davg, N;//油箱容量, 杭州到目的地的距离, 单位油行驶距离,加油站数量

int CD;//满油能跑的距离

int cheapSta[500];//汽车从车站i行驶满油距离所经过的最便宜的油站

bool canReach = true;

double res_dis, res_cost;

struct Station{

double price, distance;

};

Station sta[501];//车站数组

bool disCompare(Station s1, Station s2){

return s1.distance < s2.distance;

}

void Travel(int cur_sta, double cur_dis, double cur_oil, double cur_cost){

int next_sta = cheapSta[cur_sta];

//到达目的地

if(cur_sta==N){

res_dis = cur_dis;

res_cost = cur_cost;

return;

}

//若到下一个站的距离大于当前距离加满油距离,返回当前距离加满油距离

if(next_sta<0){

res_dis = cur_dis+CD;

res_cost = cur_cost + Cmax*sta[cur_sta].price;

canReach = false;

return;

}

double dis = sta[next_sta].distance - cur_dis;//到下一车站的距离

double oil = dis / Davg;//到下一车站的油量

//若下一站的价格比当前站低,加油使得刚好开到下一站

if(sta[next_sta].price < sta[cur_sta].price){

//若当前油箱的油不够,花钱加油,否则不用

if(cur_oil < oil){

cur_cost += (oil - cur_oil) * sta[cur_sta].price;

cur_oil = oil;

}

Travel(next_sta, sta[next_sta].distance, cur_oil-oil, cur_cost);

}else{//下一站的价格比当前站价格高,在当前站加满油过去

cur_cost += (Cmax-cur_oil) * sta[cur_sta].price;

Travel(next_sta, sta[next_sta].distance, Cmax-oil, cur_cost);

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img



既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V:vip1024c 备注Python获取(资料价值较高,非无偿)
img

现在能在网上找到很多很多的学习资源,有免费的也有收费的,当我拿到1套比较全的学习资源之前,我并没着急去看第1节,我而是去审视这套资源是否值得学习,有时候也会去问一些学长的意见,如果可以之后,我会对这套学习资源做1个学习计划,我的学习计划主要包括规划图和学习进度表。

分享给大家这份我薅到的免费视频资料,质量还不错,大家可以跟着学习

划,我的学习计划主要包括规划图和学习进度表。

分享给大家这份我薅到的免费视频资料,质量还不错,大家可以跟着学习

  • 16
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值