洛谷 U3357 C2-走楼梯

Posted 一蓑烟雨任生平

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了洛谷 U3357 C2-走楼梯相关的知识,希望对你有一定的参考价值。

题目背景

在你成功地解决了上一个问题之后,方方方不禁有些气恼,于是他在楼梯上跳来跳去,想要你求出他跳的方案数。..

题目描述

方方方站在一个n阶楼梯下面,他每次可以往上跳一步或两步,往下跳一步到四步(由于地心引力跳得比较远),而且在往下跳的时候你只能踩在你往上跳时踩过的格子。

现在方方方在楼梯上乱跳,想问他跳到楼梯顶上最后又跳回楼梯下面的方案数mod 2333333。

请注意:针对题目有歧义的情况,这里再说明一下。方方方只能一直向上跳,跳到楼梯最上面,然后再往下跳,跳回楼梯最底下。

输入输出格式

输入格式:

 

输入一行一个数n。

 

输出格式:

 

输出方方方跳回楼梯下面的方案数mod 2333333。

 

输入输出样例

输入样例#1:
5
输出样例#1:
52
输入样例#2:
7654321
输出样例#2:
451197
输入样例#3:
3
输出样例#3:
8

说明

对于30%的数据,n<=10。

对于100%的数据,1<=n<=10^7。

(其实也可以做到10^18,可是出题人懒)

思路:DP,把向下走看成向上走。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define mod 2333333
using namespace std;
int n;
long long ans[10000001];
int main(){
    //freopen("stair.in","r",stdin);
    //freopen("stair.out","w",stdout);
    scanf("%d",&n);
    ans[0]=1;ans[1]=1;ans[2]=3;ans[3]=8;
    for(int i=4;i<=n;i++)
        ans[i]=(ans[i-1]+ans[i-2]*2+ans[i-3]*3+ans[i-4]*5)%mod;
    cout<<ans[n];
}

 

以上是关于洛谷 U3357 C2-走楼梯的主要内容,如果未能解决你的问题,请参考以下文章

洛谷 U3357 C2-走楼梯

CSDN|每日一练走楼梯

CSDN|每日一练走楼梯

CSDN|每日一练走楼梯

动态规划走楼梯问题

洛谷 P1255 数楼梯