[蓝桥杯 2020 省 AB1] 走方格

题目描述

在平面上有一些二维的点阵。

这些点的编号就像二维数组的编号一样,从上到下依次为第 11 至第 n 行,从左到右依次为第 11 至第 m 列,每一个点可以用行号和列号来表示。

现在有个人站在第 11 行第 11 列,要走到第 n 行第 m 列。只能向右或者向下走。

注意,如果行号和列数都是偶数,不能走入这一格中。

问有多少种方案。

输入格式

输入一行包含两个整数 n,m。

输出格式

输出一个整数,表示答案。

输入输出样例

输入 #1
3 4
输出 #1
2
//第一遍搜索,直接爆了80分钟,最后一个点tle了,可恶,还是要dp,当我们的i,j均不为1的时候,就有i,j这个点的数量是从i-1,j和i,j-1的总和
#include<bits/stdc++.h> using namespace std; int n,m,res; bool vis[1010][1010]; void dfs(int x,int y) { if(x==n&&y==m) { res++; return; } vis[x][y]=true; if(x+1>n||x+1<=0||((x+1)%2==0&&y%2==0)) goto nexts; else dfs(x+1,y); nexts:; if(y+1>m||y+1<=0||(x%2==0&&(y+1)%2==0))goto xx; else dfs(x,y+1); xx:; vis[x][y]=false; return; } int main() { cin>>n>>m; dfs(1,1); cout<<res; return 0; } #include<bits/stdc++.h> using namespace std; int f[300][300],n,m; int main() { cin>>n>>m; f[1][1]=1; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) if(i%2==0&&j%2==0||(i==1&&j==1)) continue; else f[i][j]=f[i-1][j]+f[i][j-1]; cout<<f[n][m]; return 0; }

 

posted @ 2023-05-26 14:41  o-Sakurajimamai-o  阅读(37)  评论(0)    收藏  举报
-- --