一本通1194

这篇博客介绍了如何使用递归和动态规划方法解决移动路线问题。代码示例展示了两种实现方式,递归函数move()以及动态规划的解决方案。动态规划通过状态转移方程dp[i][j]=dp[i-1][j]+dp[i][j-1]来计算从(1,1)到(i,j)的方案数。博客作者提醒读者理解这两种算法的重要性,并鼓励留下点赞。
摘要由CSDN通过智能技术生成

这题太赶单(简单)了!

给你两种代码,DP和普通递归:

//移动路线
#include <iostream>
using namespace std;
int n, m;

//递归写法
int move(int n, int m) {
	if (n == 1 || m == 1)
		return 1;
	return move(m - 1, n) + move(m, n - 1);
}

int dp[30][30];

int main() {
	cin >> n >> m;

//  递归写法
//	cout << move(n, m);


	/*
		动态规划写法

		状态
			dp[i][j] 表示从 (1, 1) 到 (i, j) 的方案数
		状态转移方程
			dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
	*/
	for (int i = 1; i <= n; i ++)
		dp[i][1] = 1;
	for (int j = 1; j <= m; j ++)
		dp[1][j] = 1;

	for (int i = 2; i <= n; i ++)
		for (int j = 2; j <= m; j ++)
			dp[i][j] = dp[i - 1][j] + dp[i][j - 1];

	cout << dp[n][m];
	return 0;
}

原题链接: 信息学奥赛一本通(C++版)在线评测系统 (ssoier.cn)

创作不易,留一个赞再走吧 (●'◡'●) 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值