链接:

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld

题目描述

在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧。在桥上有一些石子,青蛙很讨厌踩在这些石子上。由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙可能到达的点看成数轴上的一串整点: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个石子在数轴上的位置(数据保证桥的起点和终点处没有石子)。 所有相邻的整数之间用一个空格隔开。

输出描述:

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

示例1
输入

10
2 3 5
2 3 5 6 7

输出

2

备注:
对于30%的数据,L<=10000;

对于全部的数据,L<=109

题解:

首先肯定是想到dp
dp[i]表示走到i这个位置的最小的踩石头的次数
当从位置j调到位置i后,
如果当前位置i没有石头 f [ i ] = min ( f [ i ] , f [ j ] )
如果当前位置i有石头:f[i] = min ( f [ i ], f [ j ] + 1)
就就这样吗?
并不是,看看数据范围,开数组肯定爆了,这是在逼我们做优化
我注意看除了L之外的其他数据,相比之下S,T,M都够小的,像S,T才0到10,那两个石头之间距离很大的话,我们可以调整步伐使得不踩到石头如果这样考虑,两个距离很远的石头之间,我们可以到达任意距离。那距离再长又有何影响。
那我就要考虑两个石头之间距离达到多少才算大呢?
[S,T]是跳跃的范围
当距离Len大于S * T时,len都至少有两种方法可以跳到,(因为S * T等于T个S相加或者S个T相加),之后的距离都可以在修改之前的基础上得到实现。说白了就是距离大于ST之后,都可以到达,那我们把距离大的都缩小到ST,这样L的范围不就限制住了嘛
回归本题,S和T不重复时,S最大是9,T最大是10,S * T最大是90,也就是距离大于90的两个石头
所以我们只需将每两个石头超过 S * T 的距离缩成S * T就可以了

当S=T时,只需要枚举每个石头的坐标是否为s的倍数即可

代码

含注释

#include<bits/stdc++.h>
using namespace std;
const int maxn = 90 * 105;int s[maxn],a[maxn];
int dp[maxn],len;bool f[maxn]; //标记改点是否为石头
memset(dp,0x7f,sizeof(dp));
int main()
{int L,s,t,m;cin >> L >> s >> t >> m;len = s * t;for(int i = 1 ; i <= m ; ++ i)cin >> s[i];sort(s + 1,s + 1 + m);if(s == t)//当s与t重复时 {int sum =0;for(int i = 1 ; i <= m ; ++ i)if(s[i] % s == 0)sum++;printf("%d",sum);return 0;}for(int i = 1 ; i <= m ; ++ i){int d = s[i] - s[i - 1];//两个石头之间的距离 if(d >= len)d = len;//过大的距离进行更新 a[i] = a[i - 1] + d;//将新的石头之间的距离更新到数组a中 f[a[i]] = 1;//更新新的石头 if(i==m)L = a[m] + len;//根据最后一个石头来重新更新独木桥的长度 }dp[0] = 0;for(int i = 1 ; i <= L ; ++ i)for(int j = s ; j <= t ; ++ j){if(i >= j){if(f[i])dp[i] = min(dp[i - j] + 1,dp[i]);else dp[i] = min(dp[i - j],dp[i]);}}int ans = 200;for(int i = a[m] ; i <= L ; ++ i)ans = min(ans,dp[i]);cout << ans << endl;return 0;
}

牛客网 【每日一题】5月9日 过河相关推荐

  1. 牛客网 每日一题 7月23日题目精讲—wpy的请求

    来源:牛客网: 文章目录 wpy的请求 题解: 代码: wpy的请求 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K Special Judge ...

  2. 2021-09-02牛客网每日10题--前端

    3 ng-class是做什么用的? 给元素绑定类名 eg:用法①: // An highlighted block <div ng-class="{'A':isA,'B':isB,'C ...

  3. 牛客网SQL刷题笔记(MySQL)

    牛客网SQL刷题笔记(MySQL) 此博客集合LeetCode.牛客网常见的题型及其解法,侵删 目录 牛客网SQL刷题笔记(MySQL) 类型1:查找排名第几的数据 SQL2 查找入职员工时间排名倒数 ...

  4. 牛客网Java刷题知识点之关键字static、static成员变量、static成员方法、static代码块和static内部类...

    不多说,直接上干货! 牛客网Java刷题知识点之关键字static static代表着什么 在Java中并不存在全局变量的概念,但是我们可以通过static来实现一个"伪全局"的概 ...

  5. 牛客网Java刷题知识点之构造函数可以调用一般函数,但是一般函数不可以直接调用构造函数...

    不多说,直接上干货! 通过 牛客网Java刷题知识点之构造函数是什么.一般函数和构造函数什么区别呢.构造函数的重载.构造函数的内存图解 我们对构造函数有了一个比较清楚的认识,当我们在创建对象时,我们会 ...

  6. 牛客网Java刷题知识点之Java 集合框架的构成、集合框架中的迭代器Iterator、集合框架中的集合接口Collection(List和Set)、集合框架中的Map集合...

    不多说,直接上干货! 集合框架中包含了大量集合接口.这些接口的实现类和操作它们的算法. 集合容器因为内部的数据结构不同,有多种具体容器. 不断的向上抽取,就形成了集合框架. Map是一次添加一对元素. ...

  7. 牛客网Java刷题知识点之ArrayList 、LinkedList 、Vector 的底层实现和区别

    不多说,直接上干货! 这篇我是从整体出发去写的. 牛客网Java刷题知识点之Java 集合框架的构成.集合框架中的迭代器Iterator.集合框架中的集合接口Collection(List和Set). ...

  8. 牛客网Veirlog刷题答案目录(持续更新)

    牛客网Veirlog刷题答案目录(持续更新) 基础篇 进阶篇 基础篇 1.VL1--四选一多路选择器 2.VL2--异步复位的串联T触发器 3.VL3--奇偶校验 4.VL4--移位运算与乘法 5.V ...

  9. 牛客网刷算法题的输入输出(C++)

    内容简述 该篇文章将对牛客网刷题中关于输入输出的一些问题作一个总结.每年互联网公司的招聘都必不可少会有算法题,因此平时很多人都会去一些刷题网站进行刷题来学习.这里面用的比较多的刷题网站是leetcod ...

  10. 【百日冲大厂】第十篇,牛客网选择题+编程题井字棋+密码强度等级

    前言: 大家好,我是良辰丫,刷题的第十篇,牛客网选择题+编程题井字棋+密码强度等级.

最新文章

  1. 多线程终极模式:生产者-消费者模式
  2. 海德汉编程详细手册_UG编程海德汉系统螺旋铣孔最后一刀欠切解决方案
  3. python安装依赖失败_python执行安装第三方依赖numpy失败:error: Unable to find vcvarsall.bat...
  4. 放苹果(信息学奥赛一本通-T1192)
  5. linux撤销编译,linux重新编译内核
  6. 太赞了!智能语音技术年终报告:谢磊教授、王赟博士、罗艺博士…
  7. windows环境下oracle安装教程
  8. 查看风云三号VIRR地表温度(LST)日产品属性
  9. 不限网站的视频字幕实时翻译工具(视频只要有声音就可以翻译)
  10. 如何加密PDF?使用福昕PDF编辑器加密PDF文件实操
  11. echarts柱状堆积图
  12. 【数据分析】豆瓣电影Top250爬取的数据的可视化分析
  13. MacOS 10.15编译openjdk8u详细过程
  14. 透明网桥(计算机网络)
  15. 群论基础速成(3):拉格朗日定理、直积与半直积
  16. md格式的文档转化成pdf格式
  17. 当你压力大到快崩溃时,不要跟任何人说,也不要觉得委屈
  18. Linux系统安装与使用基础之第二篇熟悉Linux操作系统
  19. 网站服务器如何选择?
  20. 计算机算最大值如何操作,如何合理设置计算机的虚拟内存值(初始大小及最大值)?...

热门文章

  1. 这就是你在妈妈肚子里尿尿的样子 | 今日最佳
  2. 基于 Python 自建分布式高并发 RPC 服务
  3. 在真实工作中的编程是怎么样的,与学校里有什么不同?
  4. java 子类 复制_关于java子类继承来的属性与方法究竟是完全复制还是共用使用...
  5. .Net性能调优-垃圾回收!!!最全垃圾回收来了
  6. 京瓷1020怎么打印自检页_[建筑]喷墨打印机如何打印自检页 详细
  7. 华为交换机初始化_华为交换机恢复出厂设置
  8. python小游戏——21点
  9. 算法题目——质量(POJ-1862)
  10. [SpringSecurity]web权限方案_用户授权_自定义403页面