1 条题解

  • 0
    @ 2026-11-1 19:55:48

    [语言月赛 202403] 星云(Nebula Numbers) 题解

    思路分析

    位数不大于 nn 的正整数即 [1,10n−1][1, 10^n - 1]。可以直接枚举 [1,10n−1][1, 10^n - 1] 统计数位和不超过 kk 的个数,也可以按数位 DP 递推 nn 位十进制数各数位和的方案数再减去全 00(数字 00 不是正整数)。

    参考代码

    #include <algorithm>
    #include <iostream>
    using namespace std;
    
    long long dp[10][105];
    
    int main()
    {
        ios::sync_with_stdio(false);
        cin.tie(nullptr);
        int n, k;
        if (!(cin >> n >> k)) return 0;
        dp[0][0] = 1;
        for (int i = 1; i <= n; ++i)
        {
            for (int s = 0; s <= 70; ++s)
            {
                for (int d = 0; d <= 9; ++d)
                {
                    if (s + d <= 100) dp[i][s + d] += dp[i - 1][s];
                }
            }
        }
        long long ans = 0;
        int lim = min(k, 100);
        for (int s = 1; s <= lim; ++s) ans += dp[n][s];
        cout << ans << "\n";
        return 0;
    }
    
    • 1

    信息

    ID
    8534
    时间
    1000ms
    内存
    512MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者