简单dp ——run

这是一篇关于编程竞赛中解决White Cloud跑步问题的博客。题目要求理解White Cloud不能连续跑两秒以上,且走和跑被视为不同的移动方式。通过动态规划(DP)方法,可以计算出从起点到终点的不同移动方式数量。文章强调了仔细阅读题目和正确理解条件的重要性。

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

链接:https://www.nowcoder.com/acm/contest/140/A
来源:牛客网
 

题目描述

White Cloud is exercising in the playground.
White Cloud can walk 1 meters or run k meters per second.
Since White Cloud is tired,it can't run for two or more continuous seconds.
White Cloud will move L to R meters. It wants to know how many different ways there are to achieve its goal.
Two ways are different if and only if they move different meters or spend different seconds or in one second, one of them walks and the other runs.

 

输入描述:

The first line of input contains 2 integers Q and k.Q is the number of queries.(Q<=100000,2<=k<=100000)
For the next Q lines,each line contains two integers L and R.(1<=L<=R<=100000)

输出描述:

For each query,print a line which contains an integer,denoting the answer of the query modulo 1000000007.

示例1

输入

复制

3 3
3 3
1 4
1 5

输出

复制

2
7
11

思路:不想说什么了。要认真读题,题目说了it can't run for two or more continuous seconds.。run是跑的意思啊!!!!!然后就是不能连续跑啊啊啊啊啊啊!烦死了。比赛时这句话直接忽略掉啊。

而且跑一个和走一个是不一样的走法啊!!!比赛时我写的代码居然还当成了同一种情况~orz

就是用一个dp[i][0]表示最后到达i点的那一步是walk过来的

dp[i][1]表示最后到达i点的那一步是run过来的。注意初始化。

 

#include<bits/stdc++.h>
using namespace std;
const int maxn=100010;
const int mod=1000000007;
long long sum[maxn];
long long dp[maxn][3];
int main()
{
    int q;int k;
    scanf("%d%d",&q,&k);
    memset(dp,0,sizeof(dp));
    memset(sum,0,sizeof(sum));
    sum[0]=0;
    dp[0][0]=0;
    dp[0][1]=0;
    for(int i=1;i<=k;i++){
        dp[i][0]=1;///到达i点,最后是走过来的
        if(i==k)
            dp[k][1]=1;///到达k点,最后是tiao过来的

        sum[i]=(dp[i][0]+dp[i][1]+sum[i-1])%mod;
       /// cout<<dp[i][0]<<"  ***  "<<dp[i][1]<<endl;

    }
    for(int i=k+1;i<=100008;i++)
    {
       dp[i][0]=dp[i-1][0]+dp[i-1][1];
       ///dp[i][1]=dp[i-k][1]+dp[i-k][0];
       dp[i][1]=dp[i-k][0];
       
       dp[i][0]=dp[i][0];
       dp[i][1]=dp[i][1];
       sum[i]=(dp[i][0]+dp[i][1]+sum[i-1])%mod;
       ///cout<<"i: "<<i<<"  "<<sum[i]<<endl;
    }
    int l,r;
    for(int i=1;i<=q;i++)
    {
        scanf("%d%d",&l,&r);
        cout<<(sum[r]-sum[l-1]+mod)%mod<<endl;
    }
    return 0;
}

 

### DP协议的发展历程与版本迭代 DisplayPort (简称DP) 是一种用于连接计算机显示器和其他显示设备的数字视频接口标准。以下是关于其发展历程和版本迭代的相关信息: #### DisplayPort 的起源与发展 DisplayPort 协议最初由 Video Electronics Standards Association (VESA) 开发,旨在替代传统的 VGA 和 DVI 接口,并提供更高的带宽和支持更丰富的功能[^5]。 #### 主要版本及其特性 1. **DisplayPort 1.0** - 发布于2006年5月,支持最大分辨率为2560×1600@75Hz 或者更高刷新率下的较低分辨率。 - 提供单链路最高每通道2.7 Gbps的数据速率以及多链路配置选项来增加总带宽[^5]。 2. **DisplayPort 1.1** - 在2007年初推出,增加了对音频流的支持能力,允许同时传输视频与立体声或多声道环绕声音频数据。 - 改进了电源管理机制以减少功耗;引入了面板自我刷新技术(Panel Self Refresh),使得笔记本电脑可以在屏幕静止时不需持续更新画面从而节省电池寿命[^5]。 3. **DisplayPort 1.2** - 2009年底发布,显著提升了性能指标——每个方向上的数据速率达到5.4 Gbps(即所谓的 HBR2),这足以满足WQXGA+(2880x1620)+3D @60 Hz的需求。 - 新增MST(Multi-Stream Transport) 功能允许多个独立显示屏共享单一物理链接资源;还加入了嵌入式显示控制命令集(e-DDC),简化了小型便携装置的设计复杂度[^5]。 4. **DisplayPort 1.3 及以上** - 自2014年起陆续发布的后续版本进一步提高了速度极限至8.1Gbps(HBR3),甚至更高如USB Type-C形式下可达40Gbps双向吞吐量。 - 这些进步不仅促进了超高清(Ultra HD, UHD) 显示器普及应用,也为虚拟现实(VR)/增强现实(AR) 设备提供了强有力的技术支撑基础[^5]。 ```python # 示例代码展示如何检测当前系统的DisplayPort版本 import subprocess def get_displayport_version(): try: result = subprocess.run(['dpd', '--version'], stdout=subprocess.PIPE) dp_version = result.stdout.decode('utf-8').strip() return f"Detected DisplayPort Version: {dp_version}" except Exception as e: return str(e) print(get_displayport_version()) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值