2 条题解
-
0
#include using namespace std;
const int MOD = 100003;
int main() { int N, K; cin >> N >> K;
if (N == 0) { cout << 1 << endl; return 0; } long long dp[100005] = {0}; long long prefix[100005] = {0}; // 初始化 dp[0] = 1; prefix[0] = dp[0]; // 动态规划计算 for (int i = 1; i <= N; i++) { // 计算dp[i] = dp[i-1] + dp[i-2] + ... + dp[max(0, i-K)] int start = max(0, i - K); long long sum = prefix[i-1]; if (start > 0) { sum -= prefix[start - 1]; } sum = (sum % MOD + MOD) % MOD; dp[i] = sum; prefix[i] = (prefix[i-1] + dp[i]) % MOD; } cout << dp[N] % MOD << endl; return 0;}
-
0
#include <bits/stdc++.h> using namespace std; const int N = 100003; int main() { int n, k; cin >> n >> k; int dp[n + 1]; // 数组大小改为 n+1 memset(dp, 0, sizeof(dp)); dp[0] = 1; // 从第 0 级台阶到第 0 级台阶有一种走法 dp[1] = 1; // 从第 0 级台阶到第 1 级台阶有一种走法 for (int i = 2; i <= n; i++) { // 从第 2 级台阶开始计算 int j = min(i, k); // 每次最多走 k 步 while (j > 0) { dp[i] = (dp[i] + dp[i - j]) % N; // 累加走法数 j--; } } cout << dp[n] << endl; // 输出结果 return 0; }
- 1
信息
- ID
- 5250
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- 3
- 标签
- 递交数
- 79
- 已通过
- 30
- 上传者