蓝桥杯 棋盘里的数学

1035: 棋盘里的数学

时间限制: 1 Sec   内存限制: 128 MB
提交: 40   解决: 10
[ 提交][ 状态][ 讨论版]

题目描述

lhcoder有一个n行m列的棋盘,有一颗棋子从左上角(1,1)开始移动,每次只能往右或者往下移动一格,到右下角(n,m)一共有多少移动方案? 


输入

有多组测试数据,每组测试数据中有两个整数n和m(2 <= n, m <= 1000),代表为n行m列的棋盘。

输出

一个整数p,代表从左上角(1,1)移动到右下角(n,m)的方案数,由于方案数可能比较大,结果请对99991取模。

样例输入

2 3

样例输出

3

        一个简单的dp,当只有一行或者一列的时候,只有一种走法,一条线走下去,由于只能向下或向右走,a[i][j]表示i行j列时左上角到右下角的步数,那么到有递推公式
       a[i][j] =a[i][j-1]+a[i-1][j],打表求出结果。
 

#include 
#include 
using namespace std;
int n,m;
int a[1002][1002];
void deal(){
    a[1][2] = a[2][1] = 1;
    for(int i = 2;i <= 1000;i++)a[1][i] = a[i][1] = 1;
    for(int i = 2;i <= 1000;i++){
        for(int j = 2;j <= 1000;j++){
            a[i][j] = (a[i][j-1]+a[i-1][j])%99991;
        }
    }
}
int main()
{
    deal();
    while(~scanf("%d%d",&n,&m)){
        printf("%d\n",a[n][m]);
    }
    return 0;
}



你可能感兴趣的:(蓝桥)