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

    小乐乐下象棋

    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


     1 #include<iostream>
     2 #include<algorithm>
     3 #include<string>
     4 #include<map>
     5 #include<vector>
     6 #include<cmath>
     7 #include<string.h>
     8 #include<stdlib.h>
     9 #include<queue>
    10 #include<cstdio>
    11 #define ll long long
    12 const long long MOD=1000000007;
    13 using namespace std;
    14  
    15  
    16 int dir[8][2]={1,2,-1,-2,1,-2,-1,2,2,1,-2,-1,-2,1,2,-1};
    17 int book[205][205][205];
    18 long long n,m,k;
    19 long long dfs(int x,int y,int step){
    20     if(book[x][y][step]!=-1){
    21         return book[x][y][step];
    22     }
    23     long long ans=0;
    24     for(int i=0;i<8;i++){
    25         int xx=x+dir[i][0];
    26         int yy=y+dir[i][1];
    27         if(xx>=0&&xx<n&&yy>=0&&yy<m&&step<k){
    28             ans=(ans+dfs(xx,yy,step+1))%MOD;
    29         }
    30     }
    31     book[x][y][step]=ans;
    32     return ans;
    33 }
    34  
    35 int main(){
    36     while(cin>>n>>m>>k){
    37         for(int i=0;i<=n;i++) for(int j=0;j<=m;j++) for(int w=0;w<=k;w++) book[i][j][w]=-1;
    38         book[n-1][m-1][k]=1;
    39         cout<<dfs(0,0,0)<<endl;
    40     }
    41 }
    View Code
  • 相关阅读:
    JavaScript基础知识
    font属性+ul列表+table属性+border属性
    一级段项目学习
    考点整理代码块系列
    考试点总结
    JavaScript复习
    1017
    复习HTML
    1012总结
    1011js学习总结
  • 原文地址:https://www.cnblogs.com/Fighting-sh/p/10050348.html
Copyright © 2011-2022 走看看