【洛谷】P1192 台阶问题(记忆化、深搜)

【题目】

https://www.luogu.org/problem/P1192

【思路】

如果是普通的深搜,很容易超时,因为很多位置会重复计算。

改进方法是采用记忆化搜索的技巧。思路挺简单的,具体的看代码吧。

【代码】

#include <iostream>
#include <algorithm>
using namespace std;
int n, k, p[100005];

int dfs(int x) {
	int ans = 0;
	for (int i = 1; i <= min(k, x); i++) {
		if (p[x - i] != 0) {  // 已经搜索过
			ans = (ans + p[x - i]) % 100003;
		}
		else {
			ans = (ans + dfs(x - i)) % 100003;
		}
	}
	p[x] = ans;  // 记忆
	return ans;
}

int main() {
	cin >> n >> k;
	p[0] = 1;
	cout << dfs(n) << endl;
	return 0;
}
发布了100 篇原创文章 · 获赞 34 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_42780289/article/details/102746347