程序设计与算法6-4:Unique Paths

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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值