AHOI2009 同類分布

2022-05-20 18:56:24 字數 788 閱讀 9393

題目大意:

問在區間[l,r]內的正整數中,有多少數能被其個位數字之和整除。

思路:數字dp。

極端情況下,每一位都是9,所以各位數字之和不超過9*18。(為了方便這裡用了9*19)

f[i][j][k][flag],表示dp到從左往右第i位時,各位數字之和為j,這個數字在模mod意義下為k。

flag表示是否為邊界情況。

轉移的時候列舉這一位上的數p。

設當前位是cur,則轉移方程為:

f[i-1][j+p][(k*10+p)%mod][false]+=f[i][j][k][false];

f[i-1][j+p][(k*10+p)%mod][false]+=f[i][j][k][true];(p

1 #include2 #include3 #include4 typedef unsigned long

long

qword;

5inline qword getint()

12const qword pow=;

13const

int sum=9*19

;14 qword f[2][sum+1][sum][2

];15 inline qword calc(const qword &n) 32}

33}34}

35 ret+=f[0][mod][0][false]+f[0][mod][0][true

];36}37

return

ret;38}

39int

main()

AHOI2009 同類分布

點此看題 首先肯定想到我們要把數字和放進狀態中,但是原數會有點棘手。我們可以先列舉數字和 也就是模數 設dp i j k l dp i j k l dp i j k l 為前i ii位,是否頂到上界,數字和為k kk,餘數為l ll,我們最後要是k k k 模數,並且l 0 l 0l 0,然後就可以...

AHOI2009 同類分布 題解(數字DP)

題目大意 求 l,r 中各位數之和能被該數整除的數的個數。0 leq l leq r leq 10 顯然數字dp。搜尋時記錄 pos 表示當前位置,sum 表示各位數字之和,st 表示原數,limit 表示最高位限制。如果有時間我會寫一篇部落格學習數字dp,希望不要咕咕 轉移自然是 dfs pos ...

Ahoi2009 self 同類分布

題意 給出a,b,求出 a,b 中各位數字之和能整除原數的數的個數。這道題把上界狀態編入方程中時空複雜度才能過 算見注 include include define int long long using namespace std int f 2 20 170 170 vis 2 20 170 1...