递推

题目

一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。

机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。

问总共有多少条不同的路径?

代码

只能往右或者往下,所以第一排只能来自左边,第一列只能来自上边,而中间的可以从左边来也可以从上边来。
#include<bits/stdc++.h>
using namespace std;

int main(){
	int n, m; cin >> n >> m;
	int f[110][110];
	for(int i = 1; i <= n; i++){
		for(int j = 1; j <= 110; j++)
		{
			if(i == 1 && j == 1){
				f[i][j] = 1;
			}else if(i == 1){
				f[i][j] = f[i][j-1];
			}else if(j == 1){
				f[i][j] = f[i-1][j];
			}else {
				f[i][j] = f[i-1][j] + f[i][j-1];
			}
		}
	} 
	cout << f[n][m];
	return 0;
}

题目

跳楼梯,一次跳一步或者两步, 问跳到第n阶有多少种跳法

代码

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+5, mod = 1e9+7;
int f[N];

int main(){
	int n; cin >> n;
	f[1] = f[0] = 1;
	for(int i = 2; i <= n; i++){
		f[i] = f[i-1] + f[i-2];
	}
	cout << f[n];
}
posted @ 2022-09-13 20:04  每日一题,医生远离  阅读(59)  评论(0)    收藏  举报