[codevs1105][COJ0183][NOIP2005]过河

试题描述

在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧。在桥上有一些石子,青蛙很讨厌踩在这些石子上。由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙可能到达的点看成数轴上的一串整点:0,1,……,L(其中L是桥的长度)。坐标为0的点表示桥的起点,坐标为L的点表示桥的终点。青蛙从桥的起点开始,不停的向终点方向跳跃。一次跳跃的距离是S到T之间的任意正整数(包括S,T)。当青蛙跳到或跳过坐标为L的点时,就算青蛙已经跳出了独木桥。
题目给出独木桥的长度L,青蛙跳跃的距离范围S,T,桥上石子的位置。你的任务是确定青蛙要想过河,最少需要踩到的石子数。

输入

输入第一行有一个正整数L(1<=L<=109),表示独木桥的长度。第二行有三个正整数S,T,M,分别表示青蛙一次跳跃的最小距离,最大距离,及桥上石子的个数,其中1<=S<=T<=10,1<=M<=100。第三行有M个不同的正整数分别表示这M个石子在数轴上的位置(数据保证桥的起点和终点处没有石子)。所有相邻的整数之间用一个空格隔开。

输出

输出只包括一个整数,表示青蛙过河最少需要踩到的石子数。

输入示例


输出示例


数据规模及约定

对于30%的数据,L<=10000;
对于全部的数据,L<=109

题解

L 比较小时,可以直接 dp:设 f(i) 表示到达位置 i 时最少踩过的石子数目。正解与它做法一样,只是发现许多节点是不需要考虑的,所以我们可以忽略它们。暴力找一下 S, T 分别取 1~10 时的最大不可表数,发现只有 71,那么当相邻两个石子间距离超过 71 时,我们就可以将这个距离变成它对 71 取模再加上 2 倍的 71,最后暴力 dp 一下就好了。注意判断 S = T 的情况。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cctype>
#include <algorithm>
using namespace std; int read() {
int x = 0, f = 1; char c = getchar();
while(!isdigit(c)){ if(c == '-') f = -1; c = getchar(); }
while(isdigit(c)){ x = x * 10 + c - '0'; c = getchar(); }
return x * f;
} #define maxn 27280
int L, S, T, n, A[maxn], f[maxn];
bool has[maxn]; void up(int& a, int b) {
if(a < 0) a = b;
else a = min(a, b);
return ;
} int main() {
L = read(); S = read(); T = read(); n = read();
for(int i = 1; i <= n; i++) A[i] = read();
sort(A + 1, A + n + 1); if(S == T) {
int cnt = 0;
for(int i = 1; i <= n; i++) if(A[i] % S == 0) cnt++;
return printf("%d\n", cnt), 0;
} int p = 0;
for(int i = 1; i <= n; i++)
if(A[i] - A[i-1] <= 71) p += A[i] - A[i-1], has[p] = 1;
else p += (A[i] - A[i-1]) % 71 + 142, has[p] = 1; memset(f, -1, sizeof(f));
f[0] = 0;
for(int i = 0; i <= p + 1; i++) if(f[i] >= 0)
for(int j = S; j <= T; j++) {
int tmp = (i + j <= p + 1) ? i + j : p + 1;
up(f[tmp], f[i] + has[tmp]);
} printf("%d\n", f[p+1]); return 0;
}

[codevs1105][COJ0183][NOIP2005]过河的更多相关文章

  1. NOIP2005过河[DP 状态压缩]

    题目描述 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子上.由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙可能到达的点看成数 ...

  2. NOIP2005 过河

    过河 (river.pas/c/cpp) [问题描述] 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子上.由于桥的长度和青蛙一次跳过的距离都是正 ...

  3. [NOIP2005] 过河【Dp,思维题,缩点】

    Online Judge:Luogu P1052 Label:Dp,思维题,缩点,数学 题目描述 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子 ...

  4. [vijos1002][NOIP2005]过河

    Description 给定一条数轴,起点为0,数轴的某些整数点上有石子.每次可以移动的区间为[S,T].求当到达或超过L时,最少踩到的石子数. Input 输入的第一行有一个正整数L(1 <= ...

  5. NOIP2005过河(青蛙过河)

    题目传送门 这道题主要是因为L长度最大可以为1e9 而石子却最多只有100个 这样就浪费了很多时间空间 所以我们压缩一波路径就可以了 剩余的就是枚举每个点以及i-y到i-x的dp了 这里要说一句为什么 ...

  6. NOIp2005 过河【dp+离散化】By cellur925

    题目传送门 $30pts$ 状态和转移都比较好想:设$f[i]$表示跳到$i$位置,踩到的最小石子数.转移方程也很明了,为$f[i]$=$min${$f[i-j]$),,这个位置有石子时答案再加1,$ ...

  7. [题解+总结]NOIP动态规划大合集

    1.前言 NOIP2003-2014动态规划题目大合集,有简单的也有难的(对于我这种动态规划盲当然存在难的),今天就把这些东西归纳一下,做一个比较全面的总结,方便对动态规划有一个更深的理解. 2.NO ...

  8. 【游记】NOIP 2017

    时间:2017.11.11~2017.11.12 地点:广东省广州市第六中学 Day1 T1:看到题目,心想这种题目也能放在T1? 这个结论我之前遇到过至少3次,自己也简单证明过.初见是NOIP200 ...

  9. OI 刷题记录——每周更新

    每周日更新 2016.05.29 UVa中国麻将(Chinese Mahjong,Uva 11210) UVa新汉诺塔问题(A Different Task,Uva 10795) NOIP2012同余 ...

随机推荐

  1. break prefab instance的原理

    prefab可无限apply: 如果把一个模块做成了prefab,这个prefab可能在同一个scene中添加多个,甚至添加到了多个scene中.设所有这些实例为instance(1),instanc ...

  2. CRC校验码原理、实例、手动计算

    目录一.CRC16实现代码二.CRC32编码字符表三.CRC校验码的手动计算示例四.CRC校验原理五.CRC的生成多项式参考 一.CRC16实现代码 思路:取一个字符(8bit),逐位检查该字符,如果 ...

  3. 一步一步学习.NET Core 介绍篇 01

    什么是 ASP.NET Core? ASP.NET Core 是一个新的开源和跨平台的框架,用于构建如 Web 应用.物联网(IoT)应用和移动后端应用等连接到互联网的基于云的现代应用程序.ASP.N ...

  4. JS中判断null、undefined与NaN的方法

    写了个 str ="s"++; 然后出现Nan,找了一会. 收集资料如下判断: 1.判断undefined: 代码如下: <span style="font-siz ...

  5. 给大家推荐一款高大上的代码高亮插件(sublime,github风格)——highlight.js

    经常在一些大神博客里面看到非常好看的高亮代码,有sublime风格,GitHub风格等等.毫无疑问,好的高亮代码插件可以不仅仅让你的博文显得更高大上,更重要的是舒适的阅读体验.经过我在网上的一番搜罗, ...

  6. 20145215&20145307信息安全系统设计基础实验报告

    20145215&20145307信息安全系统设计基础实验报告 PART1 一.实验原理 交叉编译,简单地说,就是在一个平台上生成另一个平台上的可执行代码.同一个体系结构可以运行不同的操作系统 ...

  7. MD测试

    # 欢迎使用 Cmd - 在线 Markdown 编辑阅读器 ------ 我们理解您需要更便捷更高效的工具记录思想,整理笔记.知识,并将其中承载的价值传播给他人,**Cmd Markdown** 是 ...

  8. RecyclerView的使用(三)

    上个小结中介绍了如何使用RecyclerView显示不同的数据展示样式(瀑布流也是可以显示的,从GridView改就好) 本节来为RecyclerView的item添加监听事件. RecyclerVi ...

  9. windows下 nvm下载node被墙了解决办法

    不需要这么麻烦的,在1.1.1版本中,确实没有实现命令行设置.这点你分析的很对,但是从配置文件中读取镜像地址已经完成,所以直接在settings.txt中手工设置一下就好了,无需编译.以下是我的文件位 ...

  10. jQuery实现的表格展开伸缩效果实例

    <table> <thead> <tr> <th>姓名</th> <th>性别</th> <th>暂住地 ...