【题目】
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;
}