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...