洛谷1052 过河

【洛谷P1052】过河 很经典的一道题,也是很著名的一道状态压缩DP,十一的时候lch讲过但是没听懂= =,当时太弱(其实现在也很弱),然后也是因为这道题来学习了一下状态压缩dp,其实也没学多少,因为状态压缩说实话范围挺广的,可以hash可以离散化,可以bulabula.. 然后这道题的思路理解之后其实也是蛮简单的,就是因为L太大,1e9时空都会超,又因为n<100,是一个稀疏图,所以呢,可以对他进行路径压缩,我们可以认 阅读详情

NOIP2005

原题地址

https://www.luogu.org/problem/show?pid=1052

题目描述

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

题目给出独木桥的长度L,青蛙跳跃的距离范围S,T,桥上石子的位置。你的任务是确定青蛙要想过河,最少需要踩到的石子数。

输入输出格式

输入格式:

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

输出格式:

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

输入输出样例

输入样例#1:

10

2 3 5

2 3 5 6 7

输出样例#1:

2

说明

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

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

2005提高组第二题

 

解题思路

和前几天写的吃药问题差不多,l的范围太大,无法作为数组下标,所以先离散化,再DP。两点间的距离d大于t时,一定可以由d%t跳过来,所以最多只需要t+d%t种距离的状态就可以表示这两个石子之间的任意距离关系。这样就把题目中的10^9压缩成了2*t*m最多不超过2000,然后就可以放心大胆地用DP了。不过要注意题目中的“当青蛙跳到或跳过坐标为L的点时,就算青蛙已经跳出了独木桥”,所以DP的终点是一个范围而非确切的一个点,最后还要在这个范围内取最小值。

参考代码

#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstdio>
#include<cstring>
#define ll long long
using namespace std;
int f[20000],v[20000],a[211],b[211];
int main()
{
    lll;
    ints,t,m;
    cin>>l;
    cin>>s>>t>>m;
    memset(f,0x3f,sizeof(f));
    memset(v,0,sizeof(v));
    a[0]=0;
    for(int i=1;i<=m;i++)
        cin>>a[i];
    a[m+1]=l;
    sort(a,a+m+2);
    b[0]=0;
    intcnt=0;
    for(int i=1;i<=m+1;i++)
    {
       if(a[i]-a[i-1]>=t)
           cnt+=(a[i]-a[i-1])%t+t;   //这里一定要在取模后加t,否则会WA;
       elsecnt+=a[i]-a[i-1];
       v[cnt]=1;  //表示此处有石子;
    }
    v[cnt]=0,v[0]=0;
    f[0]=0;
    for(int i=1;i<=cnt+t-1;i++)
    {
       for(int j=s;j<=t;j++)
           if(i-j>=0) f[i]=min(f[i],f[i-j]+v[i]);
    }
    intans=2100000000;
    for(int i=cnt;i<=cnt+t-1;i++)   //终点可能的范围;
        ans=min(f[i],ans);
    cout<<ans;
    return0;
}

洛谷P1002(2).cpp 立即下载

相关推荐

《物联网技术》课程笔记——第二章 物联网技术架构

文章目录第二章:物联网技术架构1 物联网技术体系(C3SD)2 系统体系结构的基本概念3 物联网体系结构——信息传递视角3.1物联网感知层3.1.1 感知层要解决的问题3.1.2 感知层的形态3.1.3 节点的感知能力与控制能力3.1.4 感知层实例3.2 物联网网络层3.2.1 网络相关概念3.2.2 IPV6与IPV4相比互联网协议的升级3.2.3 计算机网络的逻辑层次3.2.4 传输网的拓扑结构3.2.4.1 举例:智能小区的三表采集系统3.2.4.2 接入层3.2.4.2 汇聚层3.2.4.2 核心

南京大学软件工程硕士在读 2503

【luogu1052】过河(dp)

又可以吃食堂的“营养套餐”啦

薇小薇 504

基于STM32 FOC下桥三电阻采样方式的电机相电流重构方法

如何提高三电阻采样的调制率

wanrenqi的博客 9186

洛谷P1052 过河(dp+状压)

题目描述 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧。在桥上有一些石子,青蛙很讨厌踩在这些石子上。由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙可能到达的点看成数轴上的一串整点:0,1,…,L0,1,…,L(其中LL是桥的长度)。坐标为00的点表示桥的起点,坐标为LL的点表示桥的终点。青蛙从桥的起点开始,不停的向终点方向跳跃。一次跳跃的距离是SS到TT之间的任...

Nan_Liu的博客 455

ARM双核锁步DCLS Lockstep技术研究(FPGA实现)

基于《Applying Dual-Core Lockstep in Embedded Processors to Mitigate Radiation-induced Soft Errors》文章总结 RISC-V双核锁步DCLS Lockstep技术参考之前文章: RISC-V双核锁步DCLS Lockstep技术总结_远古架构师alanwu的博客-优快云博客https://blog.youkuaiyun.com/heyuming20062007/article/details/123329537ARM+RIS

heyuming20062007的博客 8726

16、SQL Server索引的创建与评估

本文详细介绍了SQL Server中索引的创建与评估方法,涵盖索引的基本概念、类型(聚集与非聚集)、唯一性设置以及如何判断索引的好坏。通过实际操作步骤、维护策略和常见问题解决方案,帮助数据库开发者合理设计索引,提升查询性能并控制维护开销。同时提供了索引创建与维护的决策流程图,便于理解和应用。

water的专栏 126

洛谷 1052 dp 状态压缩

洛谷1052 dp 状态压缩 传送门 (https://www.luogu.org/problem/show?pid=1052#sub) 做完这道题之后,感觉涨了好多见识,以前做的好多状压题目都是将一维压成一个数,一直感觉状压本质就是位运算来保存状态,这道题给了一个全新的思路,通过裁剪无用的状态来有效的减少状态量,从而使空间和时间达到要求 初看题目感觉还是挺简单的,但是1e9的使得线性dp无...

weixin_30349597的博客 212

语音信号的AGC自适应增益调整matlab仿真

语音信号的自动增益控制(Automatic Gain Control,AGC)是音频处理领域中的一项重要技术。其核心功能是实时调整输入信号的幅度,使其保持在一定范围内,以优化输出信号的质量。AGC广泛应用于语音通信、语音识别、音频录制和播放等领域,旨在解决输入信号幅度波动问题,确保输出信号的稳定性和清晰度。一、AGC的基本原理1.1 幅度调整自动增益控制的基本原理是根据输入信号的幅度动态地调整系统的增益。

平时工作较为繁忙,私信消息一般晚上回复,谢谢大家~~ 917

[线性DP] 洛谷1052 过河(线性离散化)(输入数据处理问题)

题目 LP1052 思路 可以看到本题的l很大,不能作为数组索引量。一般情况下考虑两种做法,一种是转变思考状态的方法,把l转移到数组元素值上,另一种离散化。 本题用后者。 首先列出状态转移方程,i指的是线段上的坐标。 d(i)=min{d(i−k)|k∈[s,t]}d(i)=min{d(i−k)|k∈[s,t]}d(i) = min\left\{d(i-k)|k\in [s,t]\ri...

OI - IceCab 536

SAP 联产品测试

最近领导一直要求研究一下SAP联产品的使用场景,之前只是自己摸索过一次,这个重新对联产品进行一个测试。 1、首先准备好物料主数据 注意主数据中需要勾选联产品标识。 设置好物料的分摊的百分比。 2、检查BOM 在BOM中也需要维护联产品的标识 只有当组件数量未负数时,才能勾选联产品的标识。如果组件数量正值,勾选联产品的标识时会报错。 3、我们创建生产订单 可以看到按正常的生产订单下达时,系统就报错了,问题点在于离散制造的生产订单基本是结算到物料的。但是联产品是按订单结算的, 所以需要对订单类型中的结算参

我小时候很黑的博客 2106

C#身份验证黑科技:用量子级加密与多维防御矩阵构建坚不可摧的用户管理系统!

某金融系统因身份验证漏洞导致200万用户数据泄露,量子级防御可将攻击面缩小99.99%。

墨夶的博客 352

洛谷P1052 [NOIP2005 提高组] 过河【DP+路径压缩】

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

lppppppppps的博客 711

0.嵌入式控制器EC实战 Embedded Controller开发概述

文章目录前言1.嵌入式控制器EC概述2.EC芯片框图(IT8502为例)3.General Purpose I/O Port (GPIO)4.SMBus(System Management Bus,系统管理总线)5.PWM、TACH6.KBC(KeyBoard Controller)7.PS/28.ADC(模数转换)总结 前言 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 1.嵌入式控制器EC概述 嵌入式控制器EC是挂在CPU的L

qq_30135687的博客 1万+

洛谷 P1052 [NOIP2005 提高组] 过河

由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙可能到达的点看成数轴上的一串整点:1,⋯,L(其中 LL 是桥的长度)。坐标为 0 的点表示桥的起点,坐标为 L 的点表示桥的终点。怎么办呢,因为M、s、t数据不是很大,我们可以把石头离散化,因为si,tj总有相遇的时候,最大不过就是s*t必相遇,超过这个距离我们就可以把石头压缩到这个距离就行了,这样最大距离就是9*10*100了.。题目给出独木桥的长度 LL,青蛙跳跃的距离范围 S,T,桥上石子的位置。,然后在确定自己本身有没有石头就行。

j2189259313的博客 2055

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

洛谷 P1052 过河 题解

洛谷 P1052 过河 题解 洛谷 P1052 题目 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧。在桥上有一些石子,青蛙很讨厌踩在这些石子上。由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙可能到达的点看成数轴上的一串整点:0,1,…,LLL(其中L是桥的长度)。坐标为0的点表示桥的起点,坐标为LLL的点表示桥的终点。青蛙从桥的起点开始,不停的向终点方向跳跃。一次跳跃的距离是SSS到TTT之间的任意正整数(包括SSS,TTT)。当青蛙跳到或跳过坐标为L的点时,就算青蛙已

Y的博客 746

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

洛谷P1052 过河

P1052 过河 题意: 题意很明了,就不赘述了(其实是我语文水平有限还很懒… ) 分析: dp很好想,状态转移方程也简单:dp[i]=min(dp[i],dp[i−j]+mark[i]);dp[i] = min(dp[i], dp[i - j] + mark[i]);dp[i]=min(dp[i],dp[i−j]+mark[i]); 然而这个L的范围…都不用说TLE了,连数组都开不了好吧 所以这...

yudi的博客 212

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

洛谷 P1052 过河

洛谷 P1052 过河题目题目描述在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧。在桥上有一些石子,青蛙很讨厌踩在这些石子上。由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙可能到达的点看成数轴上的一串整点:0,1,……,L(其中L是桥的长度)。坐标为0的点表示桥的起点,坐标为L的点表示桥的终点。青蛙从桥的起点开始,不停的向终点方向跳跃。一次跳跃的距离是S到T之间的任

faojie的博客 445

洛谷P1052 [NOIP 2005 提高组] 过河 题解

这道题目通过动态规划和路径压缩的技巧,有效地解决了青蛙过河问题。关键在于如何将原始问题转化为适合动态规划的形式,并通过优化减少计算量。理解状态转移和路径压缩的原理是解决此类问题的关键。

Yiping2012ABC的博客 1324

洛谷P1052 过河【线性dp】【离散化】

题目:https://www.luogu.org/problemnew/show/P1052 题意: 青蛙要从0跳到超过$l$的地方,每一次可以跳$s$到$t$之间的任意数。 在河中有m个石头,要求在尽量不要跳到石头的情况下,青蛙最少可能会跳到多少颗石头。 思路: 刚开始很自然的想到就是用dp[i]表示跳到坐标i时最少要跳到多少时候,dp[i]可以用dp[i-(s~t)]转移过来。 但...

weixin_30905981的博客 174

洛谷P1052 过河 动态规划

洛谷P1052 过河通过观察可以发现 这个点很稀疏 dp 有很长一段距离都是没有用的,那么我们可以采用离散化的思想 把这个距离压缩,但同时还要保证 对答案没有影响 如果 s==t 这时候我们需要特判 只要判断 pos[ i ] % s == 0 就可以知道是否踩到石子 然后因为 最多青蛙一次只跳了 10 假如 s == 9 t == 10 如果两个石子间的距离大于100 我们每次也可以 一步...

weixin_33973600的博客 109

洛谷P1052过河

-https://www.luogu.org/problemnew/show/P1052 解题思路 和前几天写的吃药问题差不多,l的范围太大,无法作为数组下标,所以先离散化,再DP。两点间的距离d大于t时,一定可以由d%t跳过来,所以最多只需要t+d%t种距离的状态就可以表示这两个石子之间的任意距离关系。这样就把题目中的10^9压缩成了2tm最多不超过2000,然后就可以放心大胆地用DP了。不...

Amber的博客 224

洛谷-1052 过河

题目描述 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧。在桥上有一些石子,青蛙很讨厌踩在这些石子上。由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙可能到达的点看成数轴上的一串整点:0,1,…,L(其中L是桥的长度)。坐标为0的点表示桥的起点,坐标为L的点表示桥的终点。青蛙从桥的起点开始,不停的向终点方向跳跃。一次跳跃的距离是SS到TT之间的任意正整数(包括S,...

mkopvec的博客 241
上一篇: 洛谷1027 car的旅行路线
下一篇: 洛谷1041 传染病控制
zero_from
博客等级 码龄10年 11粉丝 61原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值