走楼梯升级版(原创题目)

灵感来源:http://www.cnblogs.com/TheRoadToTheGold/p/7476715.html

Description

tot 阶楼梯,每次可以往上跳 1—n 步,往下跳 1——m 步

而且在往下跳的时候只能踩在往上跳时踩过的格子。

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

注意:xxy 只能一直向上跳,跳到楼梯最上面,然后再往下跳,跳回楼梯最底下。

Input

一行 3 个整数 tot,n,m

Output

方案数 % 233333333

Example

Input

2
5 2 4
5 2 3

Output

52
42

Hint

10%的数据,1<=tot,n<=5,m=1

另外 10%的数据,1<=tot,n,m<=5
另外 20%的数据,1<=tot<=10000,1<=n,m<=5
另外 20%的数据,1<=tot<=10000,1<=n,m<=10
另外 20%的数据,1<=tot<=400000,1<=n,m<=5
对于 100%的数据,1<=tot<=400000,1<=n,m<=10

#include<cstdio>
#include<cstring>
using namespace std;
int ans;
int pre[21][21];
long long dp[1000001];
const long long mod=233333333;
void dfs(int lim,int tot,int now)
{
    if(now>tot) return;
    if(now==tot)
    {
        ans++;
        return;
    }
    for(int i=1;i<=lim;i++)
        dfs(lim,tot,now+i);
}
int main()
{
    freopen("stair.in","r",stdin);
    freopen("stair.out","w",stdout);
    int tot,n,m;
    for(int i=1;i<=15;i++)
        for(int j=1;j<=15;j++)
            {
                ans=0;
                dfs(i,j,0);
                pre[i][j]=ans;
            }
    int T;
    scanf("%d",&T);
    while(T--)
    {
        memset(dp,0,sizeof(dp));
        scanf("%d%d%d",&tot,&n,&m);
        dp[0]=1;
        for(int i=1;i<=tot;i++)
            for(int j=1;j<=m;j++)
                dp[i]=(dp[i]+dp[i-j]*pre[n][j])%mod;
        printf("%I64d\n",dp[tot]);
    }
}
时间: 2024-10-11 22:13:15

走楼梯升级版(原创题目)的相关文章

走楼梯(walk) 解题报告

走楼梯(walk) 题意 给一个长为\(n(1\le n\le 10^5)\)序列\(\{a\}\),每次从中间挖掉\([l,r]\),然后询问最长上升子序列,强制在线. 有一档分是30000和离线,然后考试的时候一直在莫队,发现就是不会删除....想到了离线树套树又懒得打.后来发现莫队只需要实现撤回就可以了..太菜了窝 然后我居然一直没想分块(大雾) 这里直接放原题解了,说的十分详细 年后就去刷ynoi(flag Code: #include <cstdio> #include <cm

【题解】【原创题目】せやな~

[题解][原创题目]せやな- 出题人:辰星凌 验题人:\(\text{YudeS}\) 楪 题目传送门:せやな- [题目描述] 简化题意: [分析] [Solution #1] 纯暴力,把所有区间权值算出来排个序取前 \(K\) 个即可,注意开 \(\text{long long}\) . 时间复杂度:\(O(n^2logn)\) . 分数:\(10pt\) . [Code #1] #include<algorithm> #include<cstring> #include<

斐波那契走楼梯

题目描述 NowCoder小时候走路喜欢蹦蹦跳跳,他最喜欢在楼梯上跳来跳去.但年幼的他一次只能走上一阶或者一下子蹦上两阶.现在一共有N阶台阶,请你计算一下NowCoder从第0阶到第N阶共有几种走法. 输入描述: 输入包括多组数据.每组数据包括一个整数n, (1≤n≤90). 输出描述: 对应每个输入包括一个输出.为redraiment到达第n阶不同走法的数量. 输入例子: 12 输出例子: 12 #include <iostream> using namespace std ; int ma

走楼梯

1.每次可以走1步,或两步,求走n级台阶的方案个数 分析,其实就是斐波那契数列,无论怎么走,最后一步要么走1级,要么走2级,所以n级方案等于n-1级和n-2级方案之和 import java.util.HashMap; public class WalkStairs { // 上n级台阶 public static int walkStairs(int n) { if (n == 1) return 1; else if (n == 2) return 2; return walkStairs(

动态规划走楼梯问题

有一条楼梯,总共有9级阶梯,从地面上出发,如果每次可以走3级,4级或6级楼梯,问共有几种方案可以走到? 解决方案一: 第一个方法比较简单,很容易想到,就是用深度搜索,我们可以反过来,把情况看出从第9层阶梯走到路面,把所有可以出现的情况都列出来,然后判断是否能到达第9级阶梯,如果可以,就把方案数加一. 代码如下: public class DPStair { static int count=0; //计算F(n)被调用了计次 static int F(int n) { count++; if(n

走楼梯算法

首先,我们来看下下面这栋楼梯: 一共四层,我们规定"一个人爬楼梯,一步可以迈一级,二级台阶,如果楼梯有N级,要求编写程序,求总共有多少种走法",接下来我们统计下这四层,每层的走法: 从这个简短的统计中,我们可以发现一个规律(如果觉得还看不出,可以再多几阶楼梯),从第三阶梯开始,走法就是第一阶梯走法和第二阶梯走法之和,第四阶梯走法是第三阶梯和第二阶梯走法之和,所以,我们可以得到如下如下公式: 由此可知,此处应用递归算法. 而第一阶梯和第二阶梯这样无规律的数字,我们可以将他定量表示,由此,

原创题目 拼方头 【组合数+记忆化优化】

题目: 有 n 条木棒,现在从中选 x 根,想要组成一个正 x-1 边形,问有几 种选法? 由于答案较大,输出它 mod 19260817 的答案. 万古神犇 hjr 秒了这道题,现在交给你做,好让方头开心一下. 分析: 此题有两个突破点: 1.既然是用x根木棒去拼x-1边形,那么必然有且仅有一条边是由两根木棒拼成的: 2.且其他边必然是由相同的木棒拼成的,也就是说,一种木棒仅当边数大于x-2时,才有可能成为正多边形中的边长: 于是我们可以一 一枚举满足(2)的木棒,并再通过枚举拼凑第x-1条边

走楼梯2

Description ?One steps through integer points of the straight line. The length of a step must be nonnegative and can be by one bigger than, equal to, or by one smaller than the length of the previous step. ?What is the minimum number of steps in orde

9.8 模拟试题

XXY 的 NOIP 模拟赛 2 题目 过路费 走楼梯升级版 蜂巢 stair beehive 英文题目与子目录名 fee 单个测试点时间限制 1秒 1秒 1秒 内存限制 128M 128M 128M 测试点数目 10 10 10 每个测试点分值 10 10 10 比较方式 全文比较(过滤行末空格及文末回车) 题目类型 传统 传统 传统 过路费 Description 这是xxy的地盘,你在任何一条道路行走都需要交过路费. 这里有n个城市和m条双向道路,每条道路连接两个城市.你从某个城市出发到达