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

HDU-2059 龟兔赛跑 动态规划

题意:给定一个规则问龟兔赛跑的结果,问题在于乌龟在何时选择充电。

解法:由于最多的只有100个充电站,而影响结果的决策发生在各个充电站,因此只要考虑到达充电站时需要采取的策略。通过一个值保留到达某站并充电的最优值即可。

代码如下:

#include <iostream>
#include <algorithm>
using namespace std;

// 如果两个节点连边,那么弧头上的点一定要加油

class Rule {
public:
    static int N;             // 充电站的数目 
    static int vr, vt1, vt2; // 三个速度值
    static int efar;         // 充电能走的距离 
    static int eti;             // 充电的时间
    static int length;         // 赛道的长度 
};

int Rule::vr, Rule::vt1, Rule::vt2, Rule::N;
int Rule::efar, Rule::eti, Rule::length;

class Node {
private:
    int x;     // 于坐标上的位置 
    double ti; // 已经花去的时间
    bool vis;  // 该点是否已经到达过

public:
    Node() {vis = false;}
    int getx() const {return x;}
    double getti() const {return ti;}
    bool getvis() const {return vis;}
    void setx(int v) {x = v;}
    void setti(double v) {ti = v;}
    void setvis(bool v) {vis = v;}
    void read() {cin >> x;}        // 读取该充电站在轴上的位置
    friend double cost(const Node &, const Node &);
};

double cost(const Node &a, const Node &b) {
    int dist = b.getx() - a.getx();
    if (dist <= Rule::efar) return Rule::eti + (1.0 * dist / Rule::vt1);
    else return Rule::eti + (1.0 * Rule::efar / Rule::vt1 + 1.0 * (dist - Rule::efar) / Rule::vt2);
}

void solve(Node nd[], int MaxN) {
    for (int i = 0; i <= Rule::N; ++i) { // 枚举从不包括终点的点出发
        if (!nd[i].getvis()) continue;  // 如果该点还没有更新过,那么其就不去更新其他点  
        for (int j = i+1; j < MaxN; ++j) { // 从i点出发能够到达的j点就是位于i点后面的点 
            if (nd[j].getvis()) { // 如果该点已被访问过 
                nd[j].setti(min(nd[j].getti(), nd[i].getti() + cost(nd[i], nd[j])));
            } else {
                nd[j].setti(nd[i].getti() + cost(nd[i], nd[j]));
                nd[j].setvis(true);
            }
        }
    }
}

bool win(Node nd[]) {
    double a = 1.0 * Rule::length / Rule::vr;
    double b = nd[Rule::N+1].getti() - Rule::eti;
    return b < a;
}

int main() {
    while (cin >> Rule::length) {
        cin >> Rule::N >> Rule::efar >> Rule::eti;
        cin >> Rule::vr >> Rule::vt1 >> Rule::vt2;
        const int MaxN = Rule::N+2;
        Node nd[MaxN];    // 对每次数据都调用一次初始化函数
        for (int i = 1; i <= Rule::N; ++i) {
            nd[i].read();
        }
        nd[0].setx(0);        // 构造起点和终点
        nd[0].setti(0.0);
        nd[0].setvis(true);
        nd[Rule::N+1].setx(Rule::length);
        solve(nd, MaxN);
        cout << (win(nd) ? "What a pity rabbit!\n" : "Good job,rabbit!\n");
    }
    return 0;
}

 

相关文章:

  • 简述WebService与.NET Remoting的区别及适应场合
  • Java开源报表JasperReport、iReport4.5.1使用详解(二)
  • 本公司信息发布系统的优点
  • 判断元素是否可见的jQuery 新窗口打开图片
  • Linux内核中_IO,_IOR,_IOW,_IOWR宏的用法与解析【转】
  • Revit参数族之ZP系列消声器
  • 漫游Kafka设计篇之数据持久化
  • LVS+Keepalived实现高可用集群
  • 互联网领袖高峰对话实录:马云李彦宏等激烈碰撞
  • 从91移动应用发展趋势报告看国内应用现状
  • 用户和组管理权限及文件访问控制
  • Android模拟器启动选项 (转发)
  • 解决 window server2008 r2 没有注册Ofiice组件的方法
  • 20171110_allow_read_only_corruption参数
  • 手机震动效果--ios
  • 收藏网友的 源程序下载网
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • CAP 一致性协议及应用解析
  • Electron入门介绍
  • Git初体验
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • JS函数式编程 数组部分风格 ES6版
  • Js基础知识(一) - 变量
  • JS学习笔记——闭包
  • mysql_config not found
  • react 代码优化(一) ——事件处理
  • Transformer-XL: Unleashing the Potential of Attention Models
  • Vue ES6 Jade Scss Webpack Gulp
  • 包装类对象
  • 机器学习中为什么要做归一化normalization
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • 解析 Webpack中import、require、按需加载的执行过程
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 目录与文件属性:编写ls
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 写给高年级小学生看的《Bash 指南》
  • 正则表达式
  • 正则与JS中的正则
  • 【运维趟坑回忆录 开篇】初入初创, 一脸懵
  • # 数论-逆元
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • (03)光刻——半导体电路的绘制
  • (三分钟)速览传统边缘检测算子
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (十一)图像的罗伯特梯度锐化
  • (终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • (转)jQuery 基础
  • *(长期更新)软考网络工程师学习笔记——Section 22 无线局域网
  • .java 9 找不到符号_java找不到符号
  • .NET 6 Mysql Canal (CDC 增量同步,捕获变更数据) 案例版
  • .NET 8 中引入新的 IHostedLifecycleService 接口 实现定时任务
  • .NET DevOps 接入指南 | 1. GitLab 安装
  • .NET建议使用的大小写命名原则
  • .Net中的设计模式——Factory Method模式