上海金马五校程序竞赛网上资格赛 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;
}
基于可靠性评估序贯蒙特卡洛模拟法的配电网可靠性评估研究(Matlab代码实现)内容概要:本文围绕“基于可靠性评估序贯蒙特卡洛模拟法的配电网可靠性评估研究”,介绍了利用Matlab代码实现配电网可靠性的仿真分析方法。重点采用序贯蒙特卡洛模拟法对配电网进行长时间段的状态抽样与统计,通过模拟系统元件的故障与修复过程,评估配电网的关键可靠性指标,如系统停电频率、停电持续时间、负荷点可靠性等。该方法能够有效处理复杂网络结构与设备时序特性,提升评估精度,适用于含分布式电源、电动汽车等新型负荷接入的现代配电网。文中提供了完整的Matlab实现代码与案例分析,便于复现和扩展应用。; 适合人群:具备电力系统基础知识和Matlab编程能力的高研究生、科研人员及电力行业技术人员,尤其适合从事配电网规划、运行与可靠性分析相关工作的人员; 使用场景及目标:①掌握序贯蒙特卡洛模拟法在电力系统可靠性评估中的基本原理与实现流程;②学习如何通过Matlab构建配电网仿真模型并进行状态转移模拟;③应用于含新能源接入的复杂配电网可靠性定量评估与优化设计; 阅读建议:建议结合文中提供的Matlab代码逐段调试运行,理解状态抽样、故障判断、修复逻辑及指标统计的具体实现方式,同时可扩展至不同网络结构或加入更多不确定性因素进行深化研究。
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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值