首页 > 其他分享 >汽车加油问题-贪心

汽车加油问题-贪心

时间:2023-05-25 17:05:40浏览次数:32  
标签:加满 int sum 最少 加油站 汽车 加油 贪心


问题描述:
  一辆汽车加满油后可行驶nkm 。旅途中有若干个加油站。设计一个有效算法,指出应在哪些加油站停靠加油,使沿途加油次数最少。
编程任务:

  对于给定的n和k个加油站位置,编程计算最少加油次数。

数据输入:
  第1行有2个正整数n和k,表示汽车加满油后可行驶nkm,且旅途有k个加油站。接下来的一行中,有k+1个整数,表示第k个加油站与第k-1个加油站之间的距离。第0个加油站表示出发地,汽车已加满油。第k+1个加油站表示目的地。
结果输出:

  计算出的最少加油次数。如果无法到达目的地,则输出”No Solution”。

算法分析:

     假设X[i]表示i-1到i号加油站之间的距离,每一次都是加满油再出发,根据贪心算法的选择性质为了要使加油次数最少就会选择离加满油的点远一点的加油站加油。另外当加满油之后,都要是此后的过程中使加油次数最少。每一次汽车中剩下的油不能再行驶到下一站就在该站加油.每一次加满油之后与起点具有相同的条件,可以看做一个新的起点,过程也是相同的。所以说加油次数最少也具有最优子结构的性质。

代码实现:

#include<bits/stdc++.h>
using namespace std;
const int max_ = 100;
int x[max_];
int len[max_];
int sum = 0;
int flag = 0; // 是否能到达终点
int total;
int n;
int k;
void InPut()
{
    scanf("%d %d", &n, &k);
    for(int i = 1; i <= k + 1; ++i)
    {
        scanf("%d", &len[i]);
    }
}
void GasUp()
{
    total = n;
    for(int i = 1; i <= k + 1; ++i)
        if(total >= len[i])
        {
            total -= len[i];
            if(total > len[i + 1])
                continue;
            else
            {
                total = n;
                x[++sum] = i;
            }
        }
        else
        {
            flag = 1;
            return;
        }
}
void OutPut()
{
    if(flag == 1)
        printf("NO Solution\n");
    else
    {
        printf("最少加油次数为 : %d \n", sum);
        printf("加油站的位置为:\n");
        for(int i = 1; i <= sum; ++i)
            printf("%d ", x[i]);
    }
}
int main()
{
    InPut();
    GasUp();
    OutPut();
}

另外一种方法:

int greedy(vector<int> x,int n)
{
  int j,i,s,sum=0, k=x.size();
  for(j=0;j<k;++j)
    if(x[j] > n) {
      cout<<"No Solution"<<endl;
      return -1;
    }
  for(i=0,s=0;i <k; ++i) {
    s += x[i];
    if(s > n) sum++,s = x[i];
  }
  return sum;
}

测试样例:

输入:

7 7

1 2 3 4 5 1 6 6

输出:

最少加油次数为 : 4
加油站的位置为:

3 4 6 7

运行截图:

汽车加油问题-贪心_c++

标签:加满,int,sum,最少,加油站,汽车,加油,贪心
From: https://blog.51cto.com/u_16129621/6350067

相关文章

  • 哈夫曼编码-贪心
    哈夫曼树的定义:n个叶结点,权分别为w1,w2,···,wn的二叉树中,带权路径长度WPL最小的二叉树叫哈夫曼树(HuffmanTree),即:最优二叉树 哈夫曼原理:1)将字符集中每个字符c出现的频率f(c)作为权值2)根据给定的权值{w1,w2,···,wn}构造n个二叉树F={T1,T2,···,Tn},每个Ti只有一个根......
  • 关于汽车电子NVM的笔记
    一、什么是NVMNVM是英文“Non-VolatileMemory”的缩写,中文翻译为“非易失性存储器”。它是指一种能够在断电情况下依旧保留数据的存储器件。NVM用于存储一些不需要频繁更改的数据,例如汽车电子控制单元(ECU)中的程序代码、校准数据、配置参数以及历史故障码等。二、为什么使用NVM......
  • 法制文化主题沙龙——“初探智能网联汽车发展与安全”
    为积极探索智能网联汽车发展与安全有关法律前沿问题,不断推动优化新兴科技产业领域良好的法治环境,2023年5月19日上午,法制总队举办了“初探智能网联汽车发展与安全”法制文化主题沙龙,邀请业界、学界、实务界等部门,共同探讨我国智能网联汽车的发展情况与立法问题。市局党委委员、副局......
  • 机器视觉在新能源汽车行业充电头自动拔插的应用
    Part.1 行业背景随着全球经济和人口的不断增长,化石燃料的消耗量也随之上涨,有限的资源导致了能源危机的出现。为了应对这一现象,我国开始推广新能源汽车以减少对化石燃料的依赖。目前,新能源汽车已经成为了汽车行业的一个重要领域,机器视觉技术也在其中发挥着越来越重要的作用,小到汽车......
  • 贪心算法
    //区间选点//数轴上有n个闭区间[a_i,b_i]。取尽量少的点,使得每个区间内都至少有一个点(不同区间内含的点可以是同一个)////Input//第一行1个整数N(N<=100)//第2~N+1行,每行两个整数a,b(a,b<=100)//INPUT:2//15//46//OUTPUT:1#include<bits/stdc++.h>usingnamespace......
  • 汽车EDI:如何与斯柯达Skoda建立EDI连接?
    大众汽车在汽车行业具有全球销量领先、技术创新、质量标杆、多品牌战略和可持续发展方面的显著地位。作为一家具有全球影响力的汽车制造商,大众汽车在塑造汽车行业发展和引领未来出行方向方面扮演着重要角色。目前我们已帮助汽车行业的客户成功对接大众汽车旗下的品牌:大众,墨西哥大......
  • 汽车类
    #include<iostream>usingnamespacestd;classcar{private: intpower; intseat;public: car(intpower,intseat) { this->power=power; this->seat=seat; } voidshow(){ cout<<"carpower:"<<power<<endl; cout&l......
  • 汽车收费
    现在要开发一个系统,管理对多种汽车的收费工作。给出下面的一个基类框架classVehicle{protected:stringNO; public:Vehicle(stringn){NO=n;} virtualintfee()=0;//计算应收费用};以Vehicle为基类,构建出Car、Truck和Bus三个类。Car的收费公式为:载客数......
  • 第十二届北京国际汽车制造博览会即将开展,台湾高技与您6月相见!
    滚珠导轨广泛应用于:自动化设备,重型搬运设备,CNC加工机,重切削加工机,CNC磨床,射出成型机,放电加工机,大型龙门机床,高刚性与重负荷需求的工作机械。 滚柱直线导轨广泛应用于:小规格使用在模具和仪器的直线运动部件上。大规格使用在重型机床和精密仪器的平面直线运动,如:精密机械、机床、自动......
  • 硬件、软件和亚马逊云科技,成就全球智能汽车生态圈!
    路特斯(Lotus)是世界知名的赛车品牌,它先后斩获了7次F1车队总冠军和6次车手年度总冠军。75年来,追求极致和创新一直是路特斯的造车哲学,面对全球新能源汽车的激烈竞争和“新四化”的浪潮,为什么路特斯说“汽车是机器与AI的载体,是机器人的第一形态”?想做好一款智能驾驶产品,为......