暗い文字列-ダイナミックプランニング

1004 ワード

「A」、「B」および「C」のみを含む文字列で、長さ3の連続するサブ列の中に「A」、「B」および「C」がそれぞれ1つある場合、この文字列は純粋であり、そうでなければこの文字列は暗い.例:
BAACAACCBAAA連続サブストリング「CBA」には「A','B','C'が1つずつ含まれているので、純粋な文字列です
AABBCCAABBは長さ3の連続するサブストリングが1つも存在しない'A','B','C'を含むので、暗い文字列である
あなたの任務は長さnの文字列('A'、'B'と'C'のみを含む)を計算し、どれだけ暗い文字列があるかを計算することです. 
説明を入力:
      n,       (1 ≤ n ≤ 30)

出力の説明:
                 

入力例:
2
3

出力例:
9
21
 
   
   
  
#include
#include
#include
#include
using namespace std;

int main(){
	int num;
	cin >> num;
	long long dp[31];

	dp[0] = 3;
	dp[1] = 9;
	dp[2] = 21;
	//int t = 189054114603;
	//cout << "t " << t;

	for (int i = 3; i < num; ++i){
		dp[i] = 2 * dp[i - 1] + dp[i - 2];
	}
	cout << dp[num - 1];
}