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

2022-03-26 10:28:05 字數 795 閱讀 6638

題目大意:求$[l,r]$中各位數之和能被該數整除的數的個數。$0\leq l\leq r\leq 10^$。

顯然數字dp。

搜尋時記錄$pos$表示當前位置,$sum$表示各位數字之和,$st$表示原數,$limit$表示最高位限制。(如果有時間我會寫一篇部落格學習數字dp,希望不要咕咕

轉移自然是$dfs(pos+1,sum+i,st*10+i)$

但是一看資料範圍,肯定不能這麼搜,不然記憶體會炸。這時我們不妨考慮取模

根據題目,我們發現:當$st\mod\ sum==0$的時候,該數是合法的。所以我們不妨列舉$mod$,當$st==0且sum==mod$時返回$1$。一共$18$位數,共$162$種狀態。

**:

#include#define int long long

using

namespace

std;

intl,r,len,mod;

int a[20],dp[20][200][200

];inline

int dfs(int pos,int sum,int st,int limit)//

pos位置,sum各位數字和,st原數,limit最高位限制

inline

int chai(int

x)

int res=0

;

for (mod=1;mod<=9*len;mod++)

return

res;

}signed 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 同類分布

題目大意 問在區間 l,r 內的正整數中,有多少數能被其個位數字之和整除。思路 數字dp。極端情況下,每一位都是9,所以各位數字之和不超過9 18。為了方便這裡用了9 19 f i j k flag 表示dp到從左往右第i位時,各位數字之和為j,這個數字在模mod意義下為k。flag表示是否為邊界情...

題解 P4127 AHOI2009 同類分布

description 給出兩個數a,b,求出 a,b 中各位數字之和能整除原數的數的個數。sample input 10 19 sample output solution 設計狀態 f len sum res 表示倒數還有 i 位要做,當前的和是 sum 摸掉模數後剩下的數是 res 那麼我們直...