• 牛客 小乐乐下象棋


    链接:https://ac.nowcoder.com/acm/contest/301/F
    来源:牛客网

    题目描述

    小乐乐一天天就知道玩,这一天又想玩象棋。
    我们都知道马走日。
    现在给定一个棋盘,大小是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


    这道题我最初的思路就是dp,写完了以后看了一下别的老哥的代码,发现他们不少人都是用的搜索。。。。。

     1 #include<cstdio>
     2 #include<cstring>
     3 using namespace std;
     4 
     5 const int MOD = 1000000007;
     6 const int maxn = 205;
     7 const int dir[][2] = {1,2, 2,1, 2,-1, 1,-2, -2,-1, -1,-2, -1,2, -2,1};
     8 int dp[2][maxn][maxn];
     9 int main(){
    10     int n, m, k;
    11     while(scanf("%d%d%d",&n,&m,&k)!=EOF){
    12         memset(dp,0,sizeof(dp));
    13         dp[0][0][0] = 1ll;
    14         for(int i=1;i<=k;i++){
    15             memset(dp[i&1],0,sizeof(dp[i&1]));
    16             for(int x=0;x<n;x++)
    17             for(int y=0;y<m;y++)
    18             for(int j=0;j<8;j++){
    19                 int xx = x+dir[j][0], yy = y+dir[j][1];
    20                 if(xx>=0&&xx<n&&yy>=0&&yy<m)
    21                     dp[i&1][xx][yy] = (dp[i&1][xx][yy]+dp[(i-1)&1][x][y])%MOD;
    22             }
    23         }
    24         printf("%d
    ",dp[k&1][n-1][m-1]);
    25     }
    26 
    27     return 0;
    28 }
    View Code


  • 相关阅读:
    PHP数组的几个操作,求并集,交集,差集,数组与字符串的相互转换及数组去重
    文件系统添加链接
    HTML中插入视频
    magento模块的建立
    数组函数
    字符串函数
    阿里服务器用户的添加
    ViewChild
    GitHub 图片加载不出来怎么办
    常用正则表达式
  • 原文地址:https://www.cnblogs.com/kongbb/p/10067365.html
Copyright © 2020-2023  润新知