ABC242_c 1111gal password

摘要
Title: ABC242_c 1111gal password
Tag: dp、组合数
Memory Limit: 64 MB
Time Limit: 1000 ms

Powered by:NEFU AB-IN

Link

ABC242_c 1111gal password

  • 题意

    以9位为基数的n位数字的数量,相邻数字相差一个或更少。
    比如 n = 2, 则11 12 21 22 23 32 33 34 43 44 45 54 55 56 65 66 67 76 77 78 87 88 89 98 99
    共25个

  • 思路

    dpdp即可,dp[i][j]dp[i][j]表示前ii位,第ii位为jj的情况的数量
    递推式就为

    dp[i][j]=(dp[i1][j1]+dp[i1][j]+dp[i1][j+1])dp[i][j] = (dp[i - 1][j - 1] + dp[i - 1][j] + dp[i - 1][j + 1])

    那么dp[n][1>10]dp[n][1->10]就是答案

  • 代码

    ps: python3python3pypy3pypy3 要慢很多很多

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    '''
    Author: NEFU AB-IN
    Date: 2022-03-06 10:46:17
    FilePath: \ACM\AtCoder\abc242\c.py
    LastEditTime: 2022-03-06 10:46:18
    '''

    N = int(1e6 + 10)
    MOD = 998244353
    dp = [[0] * 12 for _ in range(N)]

    for i in range(1, 10):
    dp[1][i] = 1

    n = int(input())
    for i in range(2, n + 1):
    for j in range(1, 10):
    dp[i][j] = (dp[i - 1][j - 1] + dp[i - 1][j] + dp[i - 1][j + 1]) % MOD

    print(sum(dp[n]) % MOD)
使用搜索:谷歌必应百度