牛客网 【每日一题】5月9日 过河
链接:
时间限制: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日 过河相关推荐
- 牛客网 每日一题 7月23日题目精讲—wpy的请求
来源:牛客网: 文章目录 wpy的请求 题解: 代码: wpy的请求 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K Special Judge ...
- 2021-09-02牛客网每日10题--前端
3 ng-class是做什么用的? 给元素绑定类名 eg:用法①: // An highlighted block <div ng-class="{'A':isA,'B':isB,'C ...
- 牛客网SQL刷题笔记(MySQL)
牛客网SQL刷题笔记(MySQL) 此博客集合LeetCode.牛客网常见的题型及其解法,侵删 目录 牛客网SQL刷题笔记(MySQL) 类型1:查找排名第几的数据 SQL2 查找入职员工时间排名倒数 ...
- 牛客网Java刷题知识点之关键字static、static成员变量、static成员方法、static代码块和static内部类...
不多说,直接上干货! 牛客网Java刷题知识点之关键字static static代表着什么 在Java中并不存在全局变量的概念,但是我们可以通过static来实现一个"伪全局"的概 ...
- 牛客网Java刷题知识点之构造函数可以调用一般函数,但是一般函数不可以直接调用构造函数...
不多说,直接上干货! 通过 牛客网Java刷题知识点之构造函数是什么.一般函数和构造函数什么区别呢.构造函数的重载.构造函数的内存图解 我们对构造函数有了一个比较清楚的认识,当我们在创建对象时,我们会 ...
- 牛客网Java刷题知识点之Java 集合框架的构成、集合框架中的迭代器Iterator、集合框架中的集合接口Collection(List和Set)、集合框架中的Map集合...
不多说,直接上干货! 集合框架中包含了大量集合接口.这些接口的实现类和操作它们的算法. 集合容器因为内部的数据结构不同,有多种具体容器. 不断的向上抽取,就形成了集合框架. Map是一次添加一对元素. ...
- 牛客网Java刷题知识点之ArrayList 、LinkedList 、Vector 的底层实现和区别
不多说,直接上干货! 这篇我是从整体出发去写的. 牛客网Java刷题知识点之Java 集合框架的构成.集合框架中的迭代器Iterator.集合框架中的集合接口Collection(List和Set). ...
- 牛客网Veirlog刷题答案目录(持续更新)
牛客网Veirlog刷题答案目录(持续更新) 基础篇 进阶篇 基础篇 1.VL1--四选一多路选择器 2.VL2--异步复位的串联T触发器 3.VL3--奇偶校验 4.VL4--移位运算与乘法 5.V ...
- 牛客网刷算法题的输入输出(C++)
内容简述 该篇文章将对牛客网刷题中关于输入输出的一些问题作一个总结.每年互联网公司的招聘都必不可少会有算法题,因此平时很多人都会去一些刷题网站进行刷题来学习.这里面用的比较多的刷题网站是leetcod ...
- 【百日冲大厂】第十篇,牛客网选择题+编程题井字棋+密码强度等级
前言: 大家好,我是良辰丫,刷题的第十篇,牛客网选择题+编程题井字棋+密码强度等级.
最新文章
- 多线程终极模式:生产者-消费者模式
- 海德汉编程详细手册_UG编程海德汉系统螺旋铣孔最后一刀欠切解决方案
- python安装依赖失败_python执行安装第三方依赖numpy失败:error: Unable to find vcvarsall.bat...
- 放苹果(信息学奥赛一本通-T1192)
- linux撤销编译,linux重新编译内核
- 太赞了!智能语音技术年终报告:谢磊教授、王赟博士、罗艺博士…
- windows环境下oracle安装教程
- 查看风云三号VIRR地表温度(LST)日产品属性
- 不限网站的视频字幕实时翻译工具(视频只要有声音就可以翻译)
- 如何加密PDF?使用福昕PDF编辑器加密PDF文件实操
- echarts柱状堆积图
- 【数据分析】豆瓣电影Top250爬取的数据的可视化分析
- MacOS 10.15编译openjdk8u详细过程
- 透明网桥(计算机网络)
- 群论基础速成(3):拉格朗日定理、直积与半直积
- md格式的文档转化成pdf格式
- 当你压力大到快崩溃时,不要跟任何人说,也不要觉得委屈
- Linux系统安装与使用基础之第二篇熟悉Linux操作系统
- 网站服务器如何选择?
- 计算机算最大值如何操作,如何合理设置计算机的虚拟内存值(初始大小及最大值)?...
热门文章
- 这就是你在妈妈肚子里尿尿的样子 | 今日最佳
- 基于 Python 自建分布式高并发 RPC 服务
- 在真实工作中的编程是怎么样的,与学校里有什么不同?
- java 子类 复制_关于java子类继承来的属性与方法究竟是完全复制还是共用使用...
- .Net性能调优-垃圾回收!!!最全垃圾回收来了
- 京瓷1020怎么打印自检页_[建筑]喷墨打印机如何打印自检页 详细
- 华为交换机初始化_华为交换机恢复出厂设置
- python小游戏——21点
- 算法题目——质量(POJ-1862)
- [SpringSecurity]web权限方案_用户授权_自定义403页面