Σ(っ °Д °;)っ惊!!
本人在水训练题过河卒时,也许是认真做了一遍吧(抄的题解),水完后想来刷蓝桥杯真题,点进此题,读完题干没想到这两道题竟如此相似,遂有感写下此篇题解
题目描述
在平面上有一些二维的点阵。
这些点的编号就像二维数组的编号一样,从上到下依次为第1至第n行,从左到右依次为第1 至第 m 列,每一个点可以用行号和列号来表示。
现在有个人站在第 1 行第 1 列,要走到第 n 行第 m 列。只能向右或者向下走。
注意,如果行号和列数都是偶数,不能走入这一格中。
问有多少种方案。
样例
输入
3 4
输出
2
算法(dp)
C++ 代码
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long LL;
const int N=32;
LL n,m;
LL f[N][N];//f[i][j]表示走到(i,j)一共有多少种方案
int main(){
cin>>n>>m;
f[0][1]=1;//初始化,对于初始位置f[1][1]可能是由f[0][1]或f[1][0]走来的
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++){
if(i%2==0&&j%2==0)continue;
f[i][j]=f[i-1][j]+f[i][j-1];//此递推公式,也是由题意得知,(i,j)只能由他的上一格(i-1,j)或者左边一格(i,j-1)走来
}
cout<<f[n][m];
return 0;
}