1.确定状态
·最后一步:无论机器人用何种方式到达右下角,总有最后挪动的一步--向右或向下
右下角坐标设为(m-1,n-1)
前一步一定是在(m-2,n-1)或(m-1.n-2)
·子问题:如果机器人有X种方式从左上角走到(m-2,n-1),有Y种方式从左上角走到(m-1,n-2),则机器人有X+Y种方式走到(m-1,n-1)
·状态:设f[i][j]为机器人有多少种方式走到(i,j)
2.转移方程
·对于任意一个格子(i,j):
f[i][j]=f[i-1][j]+f[i][j-1]
3.初始条件和边界情况
·初始条件:f[0][0]=1,因为机器人只有一种方式到左上角
·边界情况:i=0或j=0,则前一步只能有一个方向过来->f[i][j]=1
4.计算顺序
·f[0][0]=1
·计算第0/1/.../m-1行
·答案是f[m-1][n-1]
#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
int f[100][100];
int main()
{
int a,b;
cin>>a>>b;
f[0][0]=1;
for(int i=0;i<=a;i++)
{
for(int j=0;j<=b;j++)
{
if(i==0||j==0)
f[i][j]=1;
else
f[i][j]=f[i-1][j]+f[i][j-1];
}
}
cout<<f[a][b];
return 0;
}