文章
1
粉丝
28
获赞
0
访问
335
#include <iostream>
using namespace std;
const int MOD = 998244353;
int main() {
int n;
while (cin >> n) {
long long dp[n+1];
dp[1] = 3; // 当n=1时,需要移动3次
for (int i = 2; i <= n; ++i) {
dp[i] = (2 * dp[i - 1] + 5) % MOD;
}
cout << dp[n] << endl;
}
return 0;
}
由于递归的深度可以达到1e6,这会导致非常高的调用栈,从而导致栈溢出。可以使用动态规划来避免递归造成的栈溢出问题。
代码中使用了一个数组dp
来存储从1到n每个状态下的最小移动次数。这样就避免了递归调用,转而使用迭代的方式来填充这个数组。每次计算dp[i]
时,只需要查看dp[i-1]
的值即可,大大减少了计算量,并且避免了栈溢出的问题。
登录后发布评论
暂无评论,来抢沙发