博客
关于我
Codeforces Global Round 13
阅读量:406 次
发布时间:2019-03-05

本文共 879 字,大约阅读时间需要 2 分钟。

为了解决这个问题,我们需要找到将所有点的值变为1所需的最少起跳次数。每次起跳会影响后续的点,具体来说,起跳点的值减少一次,并且起跳会影响后续点的跳跃次数。

方法思路

我们可以使用动态规划来解决这个问题。具体步骤如下:

  • 初始化数组:创建一个数组 b,其中 b[i] 表示点 i 被跳跃的次数。
  • 填充数组:遍历每个点 i,计算 b[i]。根据前点的跳跃次数和当前点的初始值,确保 b[i] 不超过当前点的初始值,并且不低于前点的跳跃次数加上某个值。
  • 累加结果:将所有点的跳跃次数累加,得到最少的起跳次数。
  • 解决代码

    #include 
    #include
    void solve() { int n; std::vector
    a(n + 1); std::vector
    b(n + 1); b[0] = 0; for (int i = 1; i <= n; ++i) { b[i] = std::max(b[i - 1], a[i] - (b[i - 1] - 1)); if (b[i] > a[i]) { b[i] = a[i]; } } int ans = 0; for (int i = 1; i <= n; ++i) { ans += b[i]; } std::cout << ans << '\n';}

    代码解释

  • 初始化:读取输入并初始化数组 ab
  • 动态规划填充:遍历每个点 i,计算 b[i]。使用 std::max 确保 b[i] 不低于前点的跳跃次数加上某个值,并使用 std::min 确保 b[i] 不超过当前点的初始值。
  • 计算结果:将所有点的跳跃次数累加,得到最少的起跳次数,并输出结果。
  • 这种方法确保了每个点的跳跃次数被合理计算,避免了不必要的跳跃,从而最小化了总的起跳次数。

    转载地址:http://dkwzz.baihongyu.com/

    你可能感兴趣的文章
    php 代码混淆
    查看>>
    PHP 使用 $_SERVER['PHP_SELF'] 获取当前页面地址及其安全性问题
    查看>>
    Redis系列之如何避免缓存击穿
    查看>>
    php 内存分析
    查看>>
    PHP 函数名前面加&
    查看>>
    redis报错
    查看>>
    php 删除包含某一字符的数组元素
    查看>>
    Redis学习总结(19)——Redis 5种集群方式对比
    查看>>
    php 反射
    查看>>
    php 处理 大并发
    查看>>
    php 大文件上传
    查看>>
    php 子进程监听消息,swoole学习笔记之多线程端口监听问题记录 多进程epoll模式...
    查看>>
    PHP 学习笔记 (四)
    查看>>
    Redis入门概述
    查看>>
    php 实现Iterator 接口
    查看>>
    PHP 实现N阶矩阵相乘
    查看>>
    php 实现进制转换(二进制、八进制、十六进制)互相转换
    查看>>
    PHP 实现页面跳转的三种方式及详细解析
    查看>>
    php 将XML对象转化为数组
    查看>>
    PHP 工具
    查看>>