點此看題
首先肯定想到我們要把數字和放進狀態中,但是原數會有點棘手。
我們可以先列舉數字和(也就是模數),設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,然後就可以轉移了。
#include
#include
#define int long long
intread()
int l,r,cnt,a[20]
,dp[20]
[2][
200]
[200
],mod;
intdfs
(int pos,
bool equal,
int sum,
int mod)
return t;
}int
calc
(int num)
return res;
}signed
main()
AHOI2009 同類分布
題目大意 問在區間 l,r 內的正整數中,有多少數能被其個位數字之和整除。思路 數字dp。極端情況下,每一位都是9,所以各位數字之和不超過9 18。為了方便這裡用了9 19 f i j k flag 表示dp到從左往右第i位時,各位數字之和為j,這個數字在模mod意義下為k。flag表示是否為邊界情...
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...