原题链接
2067. 走方格 - AcWing题库https://www.acwing.com/problem/content/2069/
做法一:暴搜(会超时)
#include<iostream>
using namespace std;
int map[40][40];
int n,m;
int ans =0;
int dfs(int x, int y)
{
if(x>n||y>m||(x%2==0&&y%2==0))
return 0;
if(x==n&&y==m)
ans++;
dfs(x+1,y);
dfs(x,y+1);
}
int main()
{
cin>>n>>m;
dfs(1,1);
cout<<ans;
return 0;
}
做法2:dp
#include<iostream>
using namespace std;
int n,m;
int dp[31][31];//dp[i][j]表示到达(i,j)的方案数
int main()
{
cin>>n>>m;
for(int i =1;i<=n;i++) dp[i][1] = 1;
for(int i =1;i<=m;i++) dp[1][i] = 1;
for(int i =2;i<=n;i++)
{
for(int j =2;j<=m;j++)
{
if(i & 1 || j & 1)
{
dp[i][j] = dp[i-1][j] + dp[i][j-1];
}
}
}
cout<<dp[n][m];
}