給出兩個數a,b發現題目有兩個變數a,b,求出[a,
b][a
,b]中各位數字之和能整除原數的數的個數。
數字之和
原數於是必須想辦法設計乙個只有一種變數的數字dp,
發現唯有固定數字之和才可以在dfs中將取模作為狀態方便地轉移
記搜元素:
當前數字
數字之和
原數的模值
#include
#define reg register
#define pb push_back
typedef
long
long ll;
std::vector <
int> bt;
ll dp[19]
[205][
205]
;int mod;
ll dfs
(int k,
int flag,
int sum_1,
int sum_m)if(
!flag &&
~dp[k]
[sum_1]
[sum_m]
)return dp[k]
[sum_1]
[sum_m]
;int end = flag?bt[k]:9
; ll tmp =0;
for(reg int i =
0; i <= end; i ++
) tmp +
=dfs
(k-1
, flag&&i==end, sum_1+i,
(sum_m*
10+ i)
%mod);if
(!flag) dp[k]
[sum_1]
[sum_m]
= tmp;
return tmp;
}ll work
(ll x)
return res;
}int
main()
題解 P4127 AHOI2009 同類分布
description 給出兩個數a,b,求出 a,b 中各位數字之和能整除原數的數的個數。sample input 10 19 sample output solution 設計狀態 f len sum res 表示倒數還有 i 位要做,當前的和是 sum 摸掉模數後剩下的數是 res 那麼我們直...
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表示是否為邊界情...