AcWing1083ウィンディ数(桁DP)

我々は先頭の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 ; 
}
コードの表示

 

おすすめ

転載: www.cnblogs.com/ctyakwf/p/12649960.html