简单dp------走方格
题目:在平面上有一些二维的点阵。这些点的编号就像二维数组的编号一样,从上到下依次为第 1 至第 n 行,从左到右依次为第 1 至第 m 列,每一个点可以用行号和列号来表示。现在有个人站在第 1 行第 1 列,要走到第 n 行第 m 列。只能向右或者向下走。注意,如果行号和列数都是偶数,不能走入这一格中。问有多少种方案。
状态:f[i][j]表示走到i行j列的走法,初始状态f[1][1]=1;其后的f[i][j]=f[i-1][j]+f[i][j-1]为状态转移方程。
#include<iostream> using namespace std; const int N = 40; int n, m; int f[N][N]; 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 == 1 && j == 1) continue; if (i % 2 || j % 2) f[i][j] = f[i - 1][j] + f[i][j - 1]; } cout << f[n][m] << endl; }