D windy數(數字dp模板)

2021-09-10 06:33:04 字數 1480 閱讀 8843

windy定義了一種windy數。不含前導零且相鄰兩個數字之差至少為2的正整數被稱為windy數。 windy想知道,

在a和b之間,包括a和b,總共有多少個windy數?

input

包含兩個整數,a b。

output

乙個整數

sample input

【輸入樣例一】

1 10

【輸入樣例二】

25 50

sample output

【輸出樣例一】

9【輸出樣例二】

20hint

【資料規模和約定】

100%的資料,滿足 1 <= a <= b <= 2000000000 。

數字dp,將每個數字分離出來進行記憶化搜尋,數字dp儲存的時在不同數字的不同狀態下所需要的數,以便於下次查詢時直接使用,節約大量時間。

對於這題要求沒有前導零要仔細思考,要注意前導0是無效的不用管,比如說0001含前導0就可以直接視作1,1001就不含前導0,我們在一開始搜尋的時候要把if0標記位1

//#include

#include

#include

#include

#include

#include

#define fi first

#define se second

#define for(a) for(int i=0;i#define sc(a) scanf("%d",&a)

#define show(a) cout<#define show2(a,b) cout<#define show3(a,b,c) couttypedef

long

long ll;

typedef pair<

int,

int> p;

typedef pairint> lp;

const ll inf =

1e17+10

;const

int n =(1

<<15)

+20;const ll mod =

1000000007

;const

int base =

131;

ll t[n]

,n,m,dea[20]

,fin[20]

,pre[n]

;ll shu[

100]

,dp[

100]

[100];

ll dfs

(ll len,ll pre,ll limit,ll if0)if(

!limit&&

!if0) dp[len]

[pre]

=sum;

return sum;

}ll solve

(int x)

dfs(cnt,0,

1,1)

;}intmain()

}

SCOI2009 windy數 數字DP 模板題

windy定義了一種windy數。不含前導零且相鄰兩個數字之差至少為2的正整數被稱為windy數。windy想知道,在a和b之間,包括a和b,總共有多少個windy數?input 包含兩個整數,a b。output 乙個整數 sample input 輸入樣例一 1 10 輸入樣例二 25 50 s...

鯧數 數字dp

設從低到高第 len 1le n 1 位的數字為 x x,考慮 x x 與後面 len len 位組成逆序對的貢獻,先考慮 x 1x 1 時的貢獻,為 len 10l enle n 10 len,其中每個數字出現的次數都相同,再考慮 x 0,9 x 0 9 貢獻變為 len 10l en x 10 ...

count 數字計數 (數字dp)

給定兩個正整數a和b,求在 a,b 中的所有整數中,每個數碼 digit 各出現了多少次。input 輸入檔案中僅包含一行兩個整數a b,含義如上所述。output 輸出檔案中包含一行10個整數,分別表示0 9在 a,b 中出現了多少次。sample input 1 99 sample output...