上海金马五校程序竞赛网上资格赛 C Frog 【前缀和+DP】

本文解决了一个经典的动态规划问题——青蛙过河。青蛙位于数轴上,需从位置0跳至位置N,每次跳跃不超过L的距离。文章给出了详细的解题思路与优化后的状态转移方程,并附带了取模操作确保数值大小可控的C++实现代码。

本来这个题很简单,但因为做这种取膜的题太少,犯了很傻比的错误。在这里mark一下

题面:

Description
There is a little frog called Matt. One day he comes to a river. The river could be considered as an axis. Matt is standing on the left bank now (at position 0). He wants to cross the river and reach the right bank (at position N). But Matt could only jump at most LL units, for example from 0 to L. There are N−1 rocks lying on the river equably (at position 1,2,⋯,N−1). The size of the rocks can be ignored, so each rock can be thought as a point on the axis. Matt can jump to a rock from the left bank or other rocks, and he can jump to the right bank from a rock or the left bank.
Now, Matt wants to know how many ways are there to cross the river. Of course, Matt could only jump forward.

Input
There are no more than 100 cases. Each case contains two integers N(2≤N≤100000)and L (1≤L≤N), denoting the position of the right bank and the distance Matt could jump most.

Output
For each test case, print the number of way to cross the river module 1e9+7.

Sample Input
3 1
4 3

Sample Output
1
7

题目大意:

有个数轴,长为N,起始点为0,每次最多可以移动L。问从0到N一共有多少种走法

大致思路:

可以通过简单的例子推出一个状态转移方程:

dp[i]=dp[i1]+dp[i2]+....+dp[il]
但是,对于每一个 dp[i] 都进行这么一个循环太过于浪费时间
所以引入一个 sum 数组,将前 i 个数字的总和统计,
然后就有 p[i]=sum[i]sum[il1]
最后扫一遍,答案就出来了
关键!!对于每次运算结果都取膜!!很重要!!!

代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod=1e9+7;
const ll maxn=1e5+10;
ll p[maxn];
ll sum[maxn];
int len,num;
int main()
{
    while(cin>>num>>len)
    {
        memset(p,0,sizeof(p));
        memset(sum,0,sizeof(sum));
        sum[0]=p[0]=p[1]=1;
        for(int i=1;i<=num;++i){
            p[i]=sum[i-1];
            if(i>len)
                p[i]=(p[i]-sum[i-len-1])%mod;
            sum[i]=(p[i]+sum[i-1])%mod;
            sum[i]%=mod;
        }
        cout<<(p[num]+mod)%mod<<endl;
    }
    return 0;
}
通过短时倒谱(Cepstrogram)计算进行时-倒频分析研究(Matlab代码实现)内容概要:本文主要介绍了一项关于短时倒谱(Cepstrogram)计算在时-倒频分析中的研究,并提供了相应的Matlab代码实现。通过短时倒谱分析方法,能够有效提取信号在时间与倒频率域的特征,适用于语音、机械振动、生物医学等领域的信号处理与故障诊断。文中阐述了倒谱分析的基本原理、短时倒谱的计算流程及其在实际工程中的应用价值,展示了如何利用Matlab进行时-倒频图的可视化与分析,帮助研究人员深入理解非平稳信号的周期性成分与谐波结构。; 适合人群:具备一定信号处理基础,熟悉Matlab编程,从事电子信息、机械工程、生物医学或通信等相关领域科研工作的研究生、工程师及科研人员。; 使用场景及目标:①掌握倒谱分析与短时倒谱的基本理论及其与傅里叶变换的关系;②学习如何用Matlab实现Cepstrogram并应用于实际信号的周期性特征提取与故障诊断;③为语音识别、机械设备状态监测、振动信号分析等研究提供技术支持与方法参考; 阅读建议:建议读者结合提供的Matlab代码进行实践操作,先理解倒谱的基本概念再逐步实现短时倒谱分析,注意参数设置如窗长、重叠率等对结果的影响,同时可将该方法与其他时频分析方法(如STFT、小波变换)进行对比,以提升对信号特征的理解能力。
LeapFrog Junior点读笔是一个专为儿童设计的电子学习工具,其下载程序允许用户方便地更新和管理点读笔中的教育内容。对于初学者而言,理解和掌握这一过程是提升学习工具利用率的关键。《LeapFrog下载程序教程》正是为此设计,旨在为用户提供全面的指导和帮助。 参考资源链接:[LeapFrog下载程序教程](https://wenku.youkuaiyun.com/doc/6412b753be7fbd1778d49e5c?spm=1055.2569.3001.10343) 使用LeapFrog下载程序更新内容的步骤通常包括:连接点读笔到计算机、启动下载程序、浏览可下载内容、选择所需内容并进行下载、完成下载后同步到点读笔。在每个步骤中,用户都应该注意程序提供的提示信息,并遵循相应的操作指导。比如,在同步过程中,保持点读笔和计算机的稳定连接是成功更新内容的前提。 此外,为了确保下载内容的兼容性和安全性,建议用户仅从LeapFrog官方网站或授权的第三方平台下载教育资源。在处理过程中,如果遇到连接问题或错误提示,教程中通常会提供相应的故障排除指南,帮助用户快速定位问题并解决问题。 综上所述,通过《LeapFrog下载程序教程》的学习,用户可以熟练掌握点读笔的更新和内容管理,从而为孩子提供更丰富、更有效的学习体验。如果您希望进一步提升使用体验或解决更复杂的技术问题,建议深入阅读该教程并实践教程中的高级功能。 参考资源链接:[LeapFrog下载程序教程](https://wenku.youkuaiyun.com/doc/6412b753be7fbd1778d49e5c?spm=1055.2569.3001.10343)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值