臺階問題(洛谷P1192題題解,Java語言描述)

題目要求

題目鏈接

在這裏插入圖片描述

分析

記得講過的跳臺階問題嗎?那個題限制一個或兩個臺階,故可以使用遞推式f[i]=f[i1]+f[i2]f[i]=f[i−1]+f[i−2]求解,那這個題1K1 \sim K個臺階其實也是類似的。

到達某一個臺階的所有可能是到達其下1K1 \sim K個臺階的所有可能總和,所以遞推式是:

f[i]={j=1if[ij],i<kj=1kf[ij],i≥kf[i]= \begin{cases} \sum\limits_{j=1}^{i}f[i-j], & \text{i<k}\\ \\ \sum\limits_{j=1}^{k}f[i-j], & \text{i≥k} \end{cases}

也就是:f[i]=j=1min{i,k}f[ij]f[i] = \sum\limits_{j=1}^{min\{i, k\}}f[i-j]

注意:對100003取模。

AC代碼(Java語言描述)

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt(), k = scanner.nextInt();
        scanner.close();
        int[] nums = new int[n+1];
        nums[0] = 1;
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= k && i-j >= 0; j++) {
                nums[i] += nums[i-j];
                nums[i] %= 100003;
            }
        }
        System.out.println(nums[n]);
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章