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

深搜题(如何找到进入下一层深搜的条件)

如今许多普通百姓家有了私家车,一些人喜爱自己驾车从一个城市到另一个城市旅游。自己驾车旅游时总会碰到加油和吃饭的问题,在出发之前,驾车人总要想方设法得到从一个城市到另一个城市路线上的加油站的列表,列表中包括了所有加油站的位置及其每升的油价(如 3.25 元/L)。驾车者一般都有以下的习惯:

  1. 除非汽车无法用油箱里的汽油达到下一个加油站或目的地,在油箱里还有不少于最大容量一半的汽油时,驾驶员从不在加油站停下来;
  2. 在每一个停下的加油站总是将油箱加满;
  3. 在加油站加油的同时,买快餐等吃的东西花去 20 元。
  4. 从起始城市出发时油箱总是满的。
  5. 加油站付钱总是精确到 0.1 元(四舍五入)。
  6. 驾车者都知道自己的汽车每升汽油能够行驶的里程数。

现在要你帮忙做的就是编写一个程序,计算出驾车从一个城市到另一个城市的旅游在加油和吃饭方面最少的费用。

输入格式

第一行是一个实数,是从出发地到目的地的距离(单位:km)。

第二行是三个实数和一个整数,其中第一个实数是汽车油箱的最大容量(单位:L);第二个实数是汽车每升油能行驶的公里数;第三个实数是汽车在出发地加满油箱时的费用(单位:元);一个整数是 1 到 50 间的数,表示从出发地到目的地线路上加油站的数目。

接下来 n 行都是两个实数,第一个数表示从出发地到某一个加油站的距离(单位:km);第二个实数表示该加油站汽油的价格(单位:元)。

数据项中的每个数据都是正确的,不需判错。一条线路上的加油站根据其到出发地的距离递增排列并且都不会大于从出发地到目的地的距离。

输出格式

输出一个实数,即精确到 0.1 元的最小的加油和吃饭费用。

输入输出样例

输入 #1复制

600
40  8.5  128  3
200  3.52
350  3.45
500  365

输出 #1复制

13133.2

//我以为自己能写开这道题的,实际上写的时候也被难住了,难在了哪呢?dfs函数实现上,我没找到在同一深度时有什么不同选择项,感觉是个线性题,实则不然,只是我没从题目中提取出来罢了,看条件一,有种情况,油不够到下一个加油站那必定加油,否则再细分,若油超过1/2,就选择不加,到现在为止是否感觉还是线性的?但如果油不够1/2时便会出现两个选择项了,停下来加油或者不停,想到这层就好写了

//奉上代码

#include <bits/stdc++.h>

using namespace std;

struct stn

{

    double loc;

    double prc;

};

stn gas[64];

int dis, n;

double vol, per, cst, ans;

bool flg = true;

void dfs(double ful, int loc, double sum){

    if(loc == n + 1){

        if(flg){

            ans = sum;

            flg = false;

        }

        else if(sum < ans){

            ans = sum;

        }

        return;

    }

    if((gas[loc + 1].loc - gas[loc].loc) / per > ful){

        sum += 20;

        sum += gas[loc].prc * (vol - ful);

        ful = vol;

        ful -= (gas[loc + 1].loc - gas[loc].loc) / per;

        dfs(ful, loc + 1, sum);

    }

    else if(ful < vol / 2){

        dfs(ful - (gas[loc + 1].loc - gas[loc].loc) / per, loc + 1, sum);

        sum += 20;

        sum += gas[loc].prc * (vol - ful);

        ful = vol;

        ful -= (gas[loc + 1].loc - gas[loc].loc) / per;

        dfs(ful, loc + 1, sum);

    }

    else{

        ful -= (gas[loc + 1].loc - gas[loc].loc) / per;

        dfs(ful, loc + 1, sum);

    }

}

int main(int argc, char const *argv[])

{

    scanf("%d", &dis);

    scanf("%lf %lf %lf %d", &vol, &per, &cst, &n);

    for(int i = 1; i <= n; i ++)

        scanf("%lf %lf", &gas[i].loc, &gas[i].prc);

    gas[n + 1].loc = dis;

    gas[0].loc = 0;

    dfs(vol, 0, 0);

    printf("%.1lf", ans + cst);

    return 0;

}


文章转载自:

http://yOWYDOlH.zxqxx.cn
http://hgpEhWMW.zxqxx.cn
http://LxNtNK1a.zxqxx.cn
http://ek1ZihVc.zxqxx.cn
http://8eUUxvWW.zxqxx.cn
http://nvvDx1so.zxqxx.cn
http://bOFNxeqt.zxqxx.cn
http://Wl8OkaLH.zxqxx.cn
http://xXL4CahI.zxqxx.cn
http://by0oRNlA.zxqxx.cn
http://YSglhZ06.zxqxx.cn
http://BIlOSdJj.zxqxx.cn
http://Vv4z2DMB.zxqxx.cn
http://9FFeCbv5.zxqxx.cn
http://UsMz9Je8.zxqxx.cn
http://usE2VAX4.zxqxx.cn
http://67GV0kJ0.zxqxx.cn
http://aFmytFRU.zxqxx.cn
http://FGc5mK2J.zxqxx.cn
http://6OfIMpb0.zxqxx.cn
http://WdXE4HyP.zxqxx.cn
http://hNDOCm3a.zxqxx.cn
http://1O18gprz.zxqxx.cn
http://2jBgFIAu.zxqxx.cn
http://D0njL432.zxqxx.cn
http://jl7lR2Ut.zxqxx.cn
http://KBqjRdc8.zxqxx.cn
http://6qtQAdmK.zxqxx.cn
http://RWmqcbaF.zxqxx.cn
http://D7mioqar.zxqxx.cn
http://www.dtcms.com/a/206908.html

相关文章:

  • Android 网络全栈攻略(三)—— 从三方库原理来看 HTTP
  • 【Java高阶面经:数据库篇】17、分库分表分页查询优化:告别慢查询与内存爆炸
  • 并发编程之常用原子类
  • 蓝桥杯 10. 安全序列
  • yolo剪枝的几种方法
  • 链表day4
  • RT-Thread源码阅读(1)——基本框架
  • 阿里云 Serverless 助力海牙湾构建弹性、高效、智能的 AI 数字化平台
  • 配置gem5环境:Dockerfile使用
  • SQL的RAND用法和指定生成随机数的范围
  • labview实现两路波形图数据采集
  • DeepSeek快速搭建个人网页
  • 搭建在线教育系统的完整流程:源码选择、功能集成与上线部署指南
  • 人形机器人,进入第一阶段概念设计和起泡沫的阶段
  • 系统性能分析基本概念(4) : 何时停止性能分析
  • 2025-05-22 学习记录--Python-函数
  • Normalized Blind Deconvolution论文阅读
  • 2025中青杯数学建模B题思路+模型+代码
  • Opencv---RotatedRect
  • 2025长三角数学建模ABC题赛题已出!速拿
  • 关于vue彻底删除node_modules文件夹
  • 手写Tomcat(一)
  • java接口自动化(四) - 企业级代码管理工具Git的应用
  • 黑马k8s(十二)
  • 【RocketMQ 生产者和消费者】- 生产者启动源码-上报生产者和消费者心跳信息到 broker(3)
  • 复盘20250522
  • LeetCode 76题「最小覆盖子串」
  • 从零基础到最佳实践:Vue.js 系列(8/10):《性能优化与最佳实践》
  • Spring AI 之提示词
  • 论文解读 | 《桑黄提取物对小鼠宫颈癌皮下移植瘤的抑制及机制研究》