【20190319】【每天一道算法题】不同路径(Ⅰ、Ⅱ)(动态规划)

博客提出机器人在 m x n 网格中从左上角到右下角,每次只能向下或向右移动一步,询问不同路径数量的问题。同时介绍了等差数列求和的相关知识点,包括公式法、错位相减法等多种方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题(一):

一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?

例如,上图是一个7 x 3 的网格。有多少可能的路径?

说明:m 和 的值均不超过 100。

解答及代码:

#include<stdio.h>
#include<stdlib.h>

int uniquePaths(int m, int n);

void main()
{
	int result=0;
	result=uniquePaths(3,7);

	printf("共有%d种路径\n",result);

	system("pause");
}

int uniquePaths(int m, int n) 
{
	int NumOfPath[100][100]; //定义数组时数组大小必须是整型常量,所以不能NumOfPath[m][n]这                 样定义,但所需的数组大小与m和n有关,提示m和n不超过100,所以先定义了100*100的二                 维数组,后面再利用m*n对数组进行赋值。

	for(int i=0;i<n;i++)  //首行、首列都是1
		NumOfPath[0][i]=1;  //这里注意:数组下标是从0开始,所以后面的return是m-1和n-1!
	for(int j=0;j<m;j++)
		NumOfPath[j][0]=1;

	for(int i=1;i<m;i++)  //后面的每个元素=左边+上面
		for(int j=1;j<n;j++)
			NumOfPath[i][j]=NumOfPath[i-1][j]+NumOfPath[i][j-1];

	return NumOfPath[m-1][n-1];


	/*推出递推公式*/   //推出了递推公式(过程在下面图片里)(按行递推相加),方法不常规!!!
	/*int NumOfPath=0,tmp=0;
    if(m==1||n==1)
		return 1;
	if(n==2)
		return m;
	for(int i=m;i>0;i--)
	{
		for(;m>0;m--)
		{
			tmp+=m-1;
		}
		NumOfPath=NumOfPath+(i+tmp*(n-3));
	}
	return NumOfPath;*/
}

知识点:

1. 等差数列求和(参考:等差数列-百度百科

  • 公式法:(首项 + 末项)× 项数 ÷ 2

  • 错位相减法
  • 裂项相消法
  • 倒序相加法
  • 分组法
  • 数学归纳法

问题(二): 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Satisfying

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值