タイトル
分析
- 第一のチャネル桁DP
- テンプレートは、直接設定します
コード
1つの#include <iostreamの> 2の#include <CStringの> 3。 の#define LLロングロング 4。 使用した 名前空間STD; 5 LL A [ 100 ]、POS; 6 LL F [ 20 ] [ 10 ] [ 10 ] [ 2 ] [ 2 ] [ 2 ]; 7 LL DFS(POS LL、LL PRE2、LL PRE1、BOOL ZERO2、BOOL ZERO1、BOOL LIM)// ゼロ先行ゼロフラグがある場合 。8 { 9 のiF(F [POS] [PRE2] [PRE1] [ZERO1] [ZERO2] [林] = - !。1) 10 リターン F [POS] [PRE2] [PRE1] [ZERO1] [ZERO2] [リム]; // メモリ検索 11。 LL ANS = 0 ; 12は、 IF(POS < 1)リターン 1 ; 13である LL =エンドイム? [POS]:9 ; 14 用(LL I = 0 ;私は=エンド<; I ++は) 15 { 16 IF(!= || I)&&(PRE1 ZERO1 = || I)(ZERO2 PRE2) // ため文字列は0に存在することができない 17の。 ANS + = DFS(POS- 1、PRE1、I、ZERO1、ZERO1 &&(I == 0)、I LIM && ==の終わり); 18れます } 19 であれば([ZERO2] [LIM] == [POS] [PRE2] [PRE1] [ZERO1] F - 1)[POS] [PRE2] [PRE1] [ZERO1] [ZERO2] [LIM] = FをANS。 20の リターンANS; 21 } 22 LL計算値(LL X) 23 { 24台の POS = 0 。 25 のmemset(F、 - 1、はsizeof (F))。 26 一方、(X)[++ POS] = X%10、X / = 10 。 27の リターン DFS(POS、0、0、1、1、1 )。 28 } 29 のint main()の 30 { 31 LLのL、R。 32 CIN >> L >> R。 33 COUT << CALC(R)-calc(1- 1 )。 34 }
Dpのデジタルテンプレート
1 LL DFS(INTカット、BOOL限界、BOOL STA) 2 { 3 であれば(カット== 0)リターン 1 。 4 LL ANS = 0 。 5 INTのCu =リミット[カット]:9 。 6 用(int型 I = 0を私は++; I <=銅) 7 { 8 た場合(I == 2 && STA)続けます。 9 もし(私!= 4 ) 10 ANS + =(DFS(カット- 1、リミット・(I == A [カット])、I == 6 ))。 11 } 12の リターンANS。 13 } 14 15 11(LLのX)解決 16 { 17 のintカット= 0 。 18 一方、(X){ 19 [切断++] =(X%10 )。 20 X / = 10 。 21 } 22の リターン DFS(カット、1、0 ); 23 } 24 25 INT (主に) 26 { 27 、B LL。 28 一方、(1 ) 29 { 30 CIN >> A >> B。 31 であれば(== 0 && Bの== 0)戻り 0 ; 32 COUT <<解く(B)-solve(A- 1)<< ENDL。 33 } 34 35 戻り 0 ; 36 }