码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2017-09-09 00:00:13      阅读:289      评论:0      收藏:0      [点我收藏+]

标签:mod   memset   example   code   main   ring   scan   mem   span   

灵感来源: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]);
    }
}

 

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

标签:mod   memset   example   code   main   ring   scan   mem   span   

原文地址:http://www.cnblogs.com/TheRoadToTheGold/p/7496661.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!