我々は先頭の0の数を持っているとしているので、この質問は再び、先行ゼロなしで列挙が必要です
最初の二つの質問は、彼らがこのような問題0なし度の数、最初の選挙のように、答えには影響しないので、やって先行ゼロを直接使用することができる理由
別の例は、あなたが扱うことができないので、0をリードし、答えに影響を与えなくてもと、問題の数は落ちていなかったです
しかし、いくつか風が強いため、そのような0135の数などの答えを、影響を与えるだろう、それは135が答えに沿ってではなく、大手0に沿ったものであることを理由に立っているので、この問題は、大手0に対処しなければなりません
#include <CStringの> する#include <iostreamの> する#include <アルゴリズム> の#include <ベクトル> 使用して名前空間をSTD。CONST INT N = 35 。INT F [N] [ 10 ]。ボイドのinit() { ために(INTは iは= 0 ; iが<= 9 ; I ++)F [ 1 ] [I] = 1 。以下のために(INT iが= 2 ; I <N I ++ ) のための(INT J = 0 ; J <= 9 ; J ++ ) のための(INT K = 0 ; K <= 9 ; K ++ ) 場合(ABS(J - K)> = 2 ) F [i]は[J] + = F [I - 1 ] [K] ; } INT DP(INT N) { 場合(N!)戻り 0 ; ベクトル < int型 > NUMS。 一方、(n)はnums.push_back(N%10)、N / = 10 。 int型のres = 0 ; int型最後= - 2 。 用(INT I = nums.size() - 1 ; I> = 0 ; I - ) { int型 X = NUMS [I]; もし(X) { ため(INT J = 1 ; J <X; J ++ ) 場合(ABS(最後- J)> = 2 ) RES + = F [I + 1 ] [J]。 もし(!I = nums.size() - 1 ) の場合(ABS(ラスト- 0)> =2 ) RES + = F [I + 1 ] [ 0 ]。 } もし - (X)<ABS(最後の2)ブレーク。 最後 = X; もし(!I)解像度++ ; } ため(INT iは= 1 ; I <nums.size(); I ++ ) のための(INT J = 1 ; J <= 9 ; J ++ ) RES + = F [I] [J]。 リターンのres; } int型のmain() { INIT()。 INT L、R。 CIN >> L >> R。 COUT << DP(R) - DP(1 - 1)<< ENDL。 リターン 0 ; }