數字dp HDU 3652 與整除有關的狀態

2021-09-25 02:16:58 字數 1078 閱讀 6871

題目大意:給你乙個數r,讓你求[1, r]有多少個數,包含連續的13數字並且能夠整除13。

包含13這個狀態很好處理,前面的那道不要62就處理過這種情況。但是這個整除的狀態就比較難表示。

後來學習了一種表示方法:用餘數表示。例如:143

pos=2時 mod2=1

pos=1時 mod1=(mod2 * 10+4)%13=1

pos=0時 mod0=(mod3 * 10+3)%13=0

所以143能被13整除。

這利用了mod的性質:

( presum * 10^pos + next ) % mod

= ( presum * 10 ^ pos % mod + next % mod )

所以整除轉化成餘數就可以儲存狀態了。

#include

#define ll long long

using

namespace std;

int a[20]

;ll dp[20]

[20][

3];//ok:0 沒有出現13 並且上一位不是1

//ok:1 沒有出現13 並且上一位是1

//ok:2 出現過13

ll dfs

(int pos,

int mod,

int ok,

int mt)

else}if

(!mt&&dp[pos]

[mod]

[ok]!=-

1)int len=mt?a[pos]:9

; ll ans=0;

for(

int i=

0;i<=len;i++

)else

if(i==3)

else}if

(!mt)

return ans;

}ll slove

(ll x)

return

dfs(pos-1,

0,0,

true);

}int

main()

return0;

}

數字DP與記憶化搜尋 HDU3652

上題目b number b number problem description a wqb number,or b number for short,is a non negative integer whose decimal form contains the sub string 13 an...

HDU 3652 數字DP 解題報告

b number problem description a wqb number,or b number for short,is a non negative integer whose decimal form contains the sub string 13 and can be div...

HDU 3652 數字DP 套路題

題意 統計能被13整除和含有13的數的個數 解法沒法好說的.學了前面兩道直接啪出來了 ps.hdu深夜日常維護,沒法交題,拿網上的 隨便對拍一下,輸出一致 include define rep i,j,k for register int i j i k i using namespace std ...