zoukankan      html  css  js  c++  java
  • 小乐乐下象棋

    题目描述

    小乐乐一天天就知道玩,这一天又想玩象棋。
    我们都知道马走日。
    现在给定一个棋盘,大小是n*m,把棋盘放在第一象限,棋盘的左下角是(0,0),右上角是(n - 1, m - 1);
    小乐乐想知道,一个马从左下角(0, 0)开始,走了k步之后,刚好走到右上角(n - 1, m - 1)的方案数。

    输入描述:

    输入:多组样例输入,每组一行,三个整数n, m, k(1 <= n, m, k <= 200),如题目所示。

    输出描述:

    输出:输出答案 mod 1000000007
    示例1

    输入

    4 4 2

    输出

    2

    题意

      中文题意,不做解释。

    分析

      数据范围200,直接暴力枚举就可以了。dp[i][x][y]表示在第i步到达(x,y)点的方案。

    ///  author:Kissheart  ///
    #include<stdio.h>
    #include<algorithm>
    #include<iostream>
    #include<string.h>
    #include<vector>
    #include<stdlib.h>
    #include<math.h>
    #include<queue>
    #include<deque>
    #include<ctype.h>
    #include<map>
    #include<set>
    #include<stack>
    #include<string>
    #define INF 0x3f3f3f3f
    #define FAST_IO ios::sync_with_stdio(false)
    const double PI = acos(-1.0);
    const double eps = 1e-6;
    const int MAX=1e5+10;
    const int mod=1e9+7;
    typedef long long ll;
    using namespace std;
    #define gcd(a,b) __gcd(a,b)
    inline ll lcm(ll a,ll b){return a/gcd(a,b)*b;}
    inline ll qpow(ll a,ll b){ll r=1,t=a; while(b){if(b&1)r=(r*t)%mod;b>>=1;t=(t*t)%mod;}return r;}
    inline ll inv1(ll b){return qpow(b,mod-2);}
    inline ll exgcd(ll a,ll b,ll &x,ll &y){if(!b){x=1;y=0;return a;}ll r=exgcd(b,a%b,y,x);y-=(a/b)*x;return r;}
    inline ll read(){ll x=0,f=1;char c=getchar();for(;!isdigit(c);c=getchar()) if(c=='-') f=-1;for(;isdigit(c);c=getchar()) x=x*10+c-'0';return x*f;}
    //freopen( "in.txt" , "r" , stdin );
    //freopen( "data.txt" , "w" , stdout );
    int n,m,k;
    ll dp[205][205][205];
    int dir[8][2]={{1,2},{1,-2},{-1,2},{-1,-2},{2,1},{2,-1},{-2,1},{-2,-1}};
    int main()
    {
        while(~scanf("%d%d%d",&n,&m,&k))
        {
            memset(dp,0,sizeof(dp));
            dp[0][1][1]=1;
            for(int i=1;i<=k;i++)
            {
                for(int x=1;x<=n;x++)
                {
                    for(int y=1;y<=m;y++)
                    {
                        for(int p=0;p<8;p++)
                        {
                            int fx=x+dir[p][0];
                            int fy=y+dir[p][1];
                            if(fx>=1 && fy>=1 && fx<=n && fy<=m)
                                dp[i][fx][fy]=(dp[i][fx][fy]%mod+dp[i-1][x][y]%mod)%mod;
                        }
                    }
                }
            }
            printf("%lld
    ",dp[k][n][m]%mod);
        }
        return 0;
    }
    View Code

      

  • 相关阅读:
    编写 grunt 插件经验
    Sencha Touch 手机移动开发框架 HTML5 项目压缩方案;
    随笔 编辑推荐 上头条了, 贴出来做个记念!
    Javascript 俄罗斯方块 游戏代码解释!
    30天自制操作系统(NASM+GCC版)
    Logisim 打不开的解决方案(Windows10)
    Kali Linux 2020通过UEFI硬盘安装(免u盘)
    开源一个自制的ORM框架,基于Java原生JDBC(应该是全网首个吧)
    书单
    前端技术文章收集
  • 原文地址:https://www.cnblogs.com/Kissheart/p/10062837.html
Copyright © 2011-2022 走看看