2 条题解

  • 0
    @ 2025-7-5 16:42:08

    #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
      @ 2025-2-27 14:45:00
      #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
      上传者