Codevs 1046 旅行家的预算 贪心

#include <iostream>
#include <algorithm>
#include <cstdlib>
#include <cstdio>
#include <queue>
using namespace std;

const int maxn = 100 + 30;
const int INF = 999999999;
double D1;          //两地之间距离 D1
double C,           //汽车容量  C
       D2;          //每升汽油能行驶的距离 D2
double P;           //出发点汽油价格 

double D[maxn];     //经过的加油站到起点的距离
double Px[maxn];    //经过的加油站的费用 

double ans;         //最后的价格
int N;              //沿途加油站个数

double rest[maxn];  //剩余

void solve();
void input();

//输入数据
void input()
{
    cin >> D1 >> C >> D2 >> P >> N;
    for (int i = 1; i <= N; i++)
    {
        cin >> D[i] >> Px[i];
        rest[i] = C;
    }
}

void solve()
{

    //输入数据
    input(); 

    //一开始肯定要加汽油
    D[N + 1] = D1;            // 为了写起来方便,将终点也认为是加油站, 离起点 D1距离
    Px[N + 1] = INF;          // 终点了嘛,所以需要价格 0
    Px[0] = P;                //起点处的 价格
    rest[0] = C;              //起点设置为 C 

    int minx = 0;             // minx: 当前价格最低的汽油站 

    for (int i = 1; i <= N+1; i++)
    {
        //接下来要前进的距离
        double need = (D[i] - D[i - 1]) / D2;     //接下来要前进的距离所需要的汽油量

        if (need > C) {                          //所需要的汽油量  大于  最大的容量,显然应该No Solution了
            cout << "No Solution\n";
            return;
        }

        //总是选择当前价格最小的加油站
        if (Px[minx] <= Px[i - 1])
        {
            if (need <= rest[minx]) {
                rest[minx] -= need;
                ans += need * Px[minx];
            }
            else {
                need -= rest[minx];
                ans += rest[minx] * Px[minx];
                minx = i - 1;                  //因为need > 当前最小价格的加油站,所以还需要加上前一个的加油站汽油
                rest[minx] -= need;
                ans += need * Px[minx];
            }
        }
        else
        {
            minx = i - 1;
            rest[minx] -= need;
            ans += need * Px[minx];
        }

    }

    printf("%.2lf\n", ans);
}

int main()
{
    solve();

    return 0;

}
时间: 2024-10-06 00:53:26

Codevs 1046 旅行家的预算 贪心的相关文章

洛谷P1016 旅行家的预算 贪心

这道题就是贪心 1.在第一个加油站的时候,如果在加满油能够到达的加油站中有一个加油站的钱比自己的少(其实等于也行),那就 加足够到那个车站的油,直接去那个车站2.这些车站中所有都比自己大,那就找一个其中钱最少的车站 在当前车站加满油,然后直接开到那个车站 3.然后到达车站时就不断重复以上的处理方法4.但这样有一个问题就是你无法到达最后一个车站,于是我们把最后一个车站的费用变为0(其实还是-1更保险)这样就保证如果能到,就一定能走到最后一个车站5.那么如何判断能否到达呢?如果在一次加油站处理操作时

蓝桥杯 算法训练 ALGO-15 旅行家的预算

算法训练 旅行家的预算 时间限制:1.0s   内存限制:256.0MB 问题描述 一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时油箱是空的).给定两个城市之间的距离D1.汽车油箱的容量C(以升为单位).每升汽油能行驶的距离D2.出发点每升汽油价格P和沿途油站数N(N可以为零),油站i离出发点的距离Di.每升汽油价格Pi(i=1,2,--N).计算结果四舍五入至小数点后两位.如果无法到达目的地,则输出"No Solution". 输入格式 第一行为4个实数D1.C.

P1016 旅行家的预算

P1016 旅行家的预算 题目描述 一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时油箱是空的).给定两个城市之间的距离D1.汽车油箱的容量C(以升为单位).每升汽油能行驶的距离D2.出发点每升汽油价格P和沿途油站数N(N可以为零),油站i离出发点的距离Di.每升汽油价格Pi(i=1,2,…,N).计算结果四舍五入至小数点后两位.如果无法到达目的地,则输出“No Solution”. 输入输出格式 输入格式: 第一行,D1,C,D2,P,N. 接下来有N行. 第i+1行,两个数

分治:旅行家的预算(travel)

旅行家的预算(Travel) [问题描述]      一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时油箱是空的).给定两个城市之间的距离D1.汽车油箱的容量C(以升为单位).每升汽油能行驶的距离D2.出发点每升汽油价格P和沿途油站数N(N可以为零),油站i离出发点的距离Di.每升汽油价格  Pi( i=l,2,...N).计算结果四舍五入至小数点后两位.如果无法到达目的地,则输出“No Solution”. [输入数据] 第一行:D1  C  D2  P  N,其含义与题目描

【NOIP1999】【Codevs 1046】旅行家的预算

http://codevs.cn/problem/1046/ Solution: 贪心,如果当前油价很低,它就比起当前剩余油的价还低就可以替换,并且每次加满,最后把剩的油卖掉即可 油价用单调链表(不知到为什么会写链表,脑抽,当时觉得插入方便,其实不用插入...尴尬)维护 or 堆(你也可以脑抽,加个log),没事啦,数据水 // <travel.cpp> - 06/23/16 12:55:15 // This file is made by YJinpeng,created by XuYike

[NOIP1999] 提高组 洛谷P1016 旅行家的预算

题目描述 一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时油箱是空的).给定两个城市之间的距离D1.汽车油箱的容量C(以升为单位).每升汽油能行驶的距离D2.出发点每升汽油价格P和沿途油站数N(N可以为零),油站i离出发点的距离Di.每升汽油价格Pi(i=1,2,…,N).计算结果四舍五入至小数点后两位.如果无法到达目的地,则输出“No Solution”. 输入输出格式 输入格式: 第一行,D1,C,D2,P,N. 接下来有N行. 第i+1行,两个数字,油站i离出发点的距离D

NOIP1999 旅行家的预算

题目描述 一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时油箱是空的).给定两个城市之间的距离D1.汽车油箱的容量C(以升为单位).每升汽油能行驶的距离D2.出发点每升汽油价格P和沿途油站数N(N可以为零),油站i离出发点的距离Di.每升汽油价格Pi(i=1,2,…,N).计算结果四舍五入至小数点后两位.如果无法到达目的地,则输出“No Solution”. 输入输出格式 输入格式: 第一行,D1,C,D2,P,N. 接下来有N行. 第i+1行,两个数字,油站i离出发点的距离D

p1016旅行家的预算

题目描述 一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时油箱是空的).给定两个城市之间的距离 D1D1 .汽车油箱的容量 CC (以升为单位).每升汽油能行驶的距离 D2D2 .出发点每升汽油价格 PP 和沿途油站数 NN ( NN 可以为零),油站 ii 离出发点的距离 DiDi .每升汽油价格 PiPi ( i=1,2,-,Ni=1,2,-,N ).计算结果四舍五入至小数点后两位.如果无法到达目的地,则输出"No Solution". 输入输出格式 输入格式:

旅行家的预算 1999年NOIP全国联赛普及组NOIP全国联赛提高组

时间限制: 1 s 空间限制: 128000 KB 题目描述 Description 一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时油箱是空的).给定两个城市之间的距离D1.汽车油箱的容量C(以升为单位).每升汽油能行驶的距离D2.出发点每升汽油价格P和沿途油站数N(N可以为零),油站i离出发点的距离Di.每升汽油价格Pi(i=1,2,--N).计算结果四舍五入至小数点后两位.如果无法到达目的地,则输出"No Solution". 输入描述 Input Descri