牛客网暑期ACM多校训练营(第二场)A-run

本文探讨了在特定条件下,白云进行健身时不同移动方案的数量计算。通过动态规划方法,解决了一个有趣的问题:在每秒可以走1米或跑k米,且不能连续两秒跑步的限制下,当移动距离在[L,R]之间时,如何计算可能的结束锻炼方案数量。文章提供了完整的C++代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

白云在健身,每秒可以走1米或跑k米,并且不能连续两秒都在跑。
当它的移动距离在[L,R]之间时,可以选择结束锻炼。
问有多少种方案结束。

爬楼梯模型:dp[n]=dp[n-1]+dp[n-1-k]

 

#include <iostream>
#include <cstdio>

using namespace std;

#define mod 1000000007

int q,k;
long long dp[100005];

int main()
{
    scanf("%d%d",&q,&k);
    for(int i=1;i<k;i++) dp[i]=1;
    dp[k]=2;
    dp[k+1]=3;
    for(int i=k+2;i<=100001;i++)
    {
        dp[i]=(dp[i-1]+dp[i-k-1])%mod;
    }
    for(int i=2;i<=100001;i++)
    {
        dp[i]=dp[i-1]%mod+dp[i]%mod;
    }
    while(q--){
        int a,b;
        scanf("%d%d",&a,&b);
        long long ans=(dp[b]-dp[a-1])%mod;
        printf("%lld\n",ans);

    }
    return 0;
}

 

转载于:https://www.cnblogs.com/Fy1999/p/9683106.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值