次のように内容は次のとおりです。
整数を考えると
n
、あなたのタスクは、どのように多くの長さの文字列カウントすることでn
、以下のルールの下に形成することができます。
- 各文字は小文字の母音です(
'a'
、'e'
、'i'
、'o'
、'u'
)- 各母音
'a'
のみを行ってもよいです'e'
。- 各母音
'e'
のみを行ってもよいです'a'
か、'i'
。- 各母音は
'i'
、別続くことはできません'i'
。- 各母音
'o'
のみを行ってもよいです'i'
か、'u'
。- 各母音は、
'u'
によってのみ続いてもよいです'a'.
答えは大きすぎる可能性がありますので、それはモジュロ戻ります
10^9 + 7.
例1:
入力:n = 1の 出力:5 説明:すべての可能な文字列は、次のとおりです。 "A"、 "E"、 "I"、 "O"と"U"。例2:
入力:n = 2の 出力:10 説明:すべての可能な文字列は、次のとおりです。 "AE"、 "EA"、 "EI"、 "IA"、 "つまり"、 "IO"、 "IU"、 "大井"、 "OU"そして"UA"。例3:
入力:N = 5 出力:68制約:
1 <= n <= 2 * 10^4
問題解決のアイデア:動的計画法、DPと呼ば[i] [j]は、文字列の数は、母音のj番目の場所のi番目の位置の場合に構成することが可能であり、状態遷移方程式を得ることは容易です。例えば、i番目の要素が'E'である場合、最初のi-1個の要素のみ'A'又は'I'とすることができる、[I] [ 'E'がDP ] DP [I-1] [A「を= 「] + DP [I-1 ] [」I「]、 そして最終的に唯一のn番目の要素は、5つの母音と缶の数を入れて決定されます。
コードは以下の通りであります:
クラス溶液(オブジェクト): デフcountVowelPermutation(自己、N): "" " :タイプN:INT :RTYPE:INT """ DP = [0] * 5 用 _ における範囲(N)] 母音 = [ ' ' ' E ' ' I ' ' O ' ' U ' ] DP [0] [0] = DP [0] [1] DPを= [0] [2] DPを= [0] [3] = DP [0] [4] = 1の ための I 中範囲(1、LEN(DP)) のために、J における範囲(LEN(母音)): もし母音[J] == ' ' : DP [I] [J] + = DP [iが- 1] [vowels.index(' E ' )] DP [I] [J] + = DP [I - 1] [vowels.index(' U ' )] DP [I] [J] + = DP [I - 1] [vowels.index(' I ' )] ELIFの母音[J] == ' E ' : DP [I] [J] + = DP [I - 1] [vowels.index(' A ' )] DP [I] [J] + = DP [I - 1] [vowels.index(' I ' )] ELIFの母音[J] == ' I ' : DP [I] [J] + = DP [I - 1] [vowels.index(' E ' )] DP [I] [J] + = DP [I - 1] [vowels.index(' O ' )] ELIFの母音[J] == ' O ' : DP [I] [J] + = DP [I - 1] [vowels.index(' iは[)] ELIFの母音[J] == ' U ' : DP [I] [J] + = DP [I - 1] [vowels.index(' I ' )] DP [I] [J] + = DP [I - 1] [vowels.index(' O ' )] 戻り和(DP [-1])%(10 ** 9 + 7)