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

[NOIP2005]过河

题目描述

\(n\) 个点不能踩, 每次只能走 \(S\)\(T\) 这个范围的距离,问你通过 \(L\) 至少需要走到多少石子。

算法分析

发现 \(L\) 的长度十分的长,显然如果直接按照长度 DP 的话时间复杂度会炸

因为有加值关系,离散化是不可以的。 我们发现\(max\{S,T\}\) 的值非常的小, 那么我们可以直接对 \(lcm(S,T)\) 取模, 进行DP, 这样就可以把空间复杂度降为\(2520\)

在原DP上同时进行取模就能够在 \(O(2520 n)\) 的时间复杂度过这道题

代码

#include <cstdio>
#include <algorithm>

const int maxn = 2520 * 110;
const int maxm = 210;
const int mod = 2520;

int f[maxn], a[maxm], d[maxn], n, L, S, T, M;

int min(const int &x, const int &y) {
    return x > y ? y : x;
}

int main() {
    scanf("%d %d %d %d", &L, &S, &T, &n);
    for (int i = 1; i <= n; ++ i) scanf("%d", a + i);
    std::sort(a + 1, a + n + 1);
    for (int i = 1; i <= n; ++ i) d[i] = a[i] - a[i - 1], d[i] %= mod, a[i] = a[i - 1] + d[i], f[a[i]] = 1;
    int l = a[n] + T;
    for (int i = 1; i <= l; ++ i) {
        int mn = n;
        for (int j = S; j <= T && j <= i; ++ j) {
            mn = min(mn, f[i - j]);
        }
        f[i] += mn;
    }
    int ans = 0x3f3f3f3f;
    for (int i = 1; i <= T; ++ i)
        ans = min(ans, f[l - i]);
    printf("%d", ans);
}

转载于:https://www.cnblogs.com/Alessandro/p/9925846.html

相关文章:

  • git学习(1)
  • Vue组件系统
  • git学习(2)
  • AJAX封装数据处理简单操作
  • shader学习(3)
  • go学习笔记-语言指针
  • shader学习(4)
  • shader学习(5)
  • 367. 有效的完全平方数
  • git学习(3)
  • shader学习(6)
  • 技术团队管理者的问题视角
  • NGUI ScrollView优化
  • 软工作业 6:软件设计—— 用户体验(案例分析)
  • 齐次坐标
  • 《Java8实战》-第四章读书笔记(引入流Stream)
  • 【挥舞JS】JS实现继承,封装一个extends方法
  • 0x05 Python数据分析,Anaconda八斩刀
  • dva中组件的懒加载
  • egg(89)--egg之redis的发布和订阅
  • java8 Stream Pipelines 浅析
  • JavaScript的使用你知道几种?(上)
  • Java教程_软件开发基础
  • Js基础知识(一) - 变量
  • Lucene解析 - 基本概念
  • Python_网络编程
  • Python学习笔记 字符串拼接
  • select2 取值 遍历 设置默认值
  • session共享问题解决方案
  • Stream流与Lambda表达式(三) 静态工厂类Collectors
  • swift基础之_对象 实例方法 对象方法。
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • 初识MongoDB分片
  • 简单数学运算程序(不定期更新)
  • 京东美团研发面经
  • 前嗅ForeSpider中数据浏览界面介绍
  • 全栈开发——Linux
  • 容器服务kubernetes弹性伸缩高级用法
  • 限制Java线程池运行线程以及等待线程数量的策略
  • 小而合理的前端理论:rscss和rsjs
  • 一份游戏开发学习路线
  • 一些关于Rust在2019年的思考
  • 【运维趟坑回忆录 开篇】初入初创, 一脸懵
  • kubernetes资源对象--ingress
  • MPAndroidChart 教程:Y轴 YAxis
  • 仓管云——企业云erp功能有哪些?
  • 进程与线程(三)——进程/线程间通信
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • $ git push -u origin master 推送到远程库出错
  • (14)Hive调优——合并小文件
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序】超详细~~
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (十)T检验-第一部分
  • (图)IntelliTrace Tools 跟踪云端程序