题目:蓝桥杯2020年第十一届省赛真题-走方格 - C语言网 (dotcpp.com)
< < < < < < < 动态规划 > > > > > > >
记得初始化 f 数组为0;
1 f[i][j]中 i 是行数,j 是列数;
2 f[1][1]是起点,所以方案数为1;
3 行号和列数都是偶数,所以if(i%2==0&&j%2==0)continue;
4 状态转移方程:f[i][j]=f[i][j]+f[i-1][j]+f[i][j-1];
因为到达一个点得方案数是自己原本的方案数加上上面一步的方案数加上左边一步得方案数;
从 条件3 中可以看出在行号和列数都是偶数的地点,方案数为0;
如果状态转移方程不想加上自己原本的方案数,写成f[i][j]=f[i-1][j]+f[i][j-1]; 那么在起点的时候要continue;
#include<bits/stdc++.h>
using namespace std;
int f[40][40];
int main()
{
int n,m;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)continue;
f[i][j]=f[i][j]+f[i-1][j]+f[i][j-1];
}
}
cout<<f[n][m];
return 0;
}