1. 程式人生 > >牛客網 - 不想再WA了(遞推)

牛客網 - 不想再WA了(遞推)

題目連結:https://ac.nowcoder.com/acm/contest/322/G
時間限制:C/C++ 1秒,其他語言2秒
空間限制:C/C++ 32768K,其他語言65536K
64bit IO Format: %lld

題目描述

歡迎參加西南民族大學 2018 年校賽。
對於你來說,做題 WA 了是一件很痛苦的事,所以你從現在開始不想再看到有題 WA 了。
那麼現在給你 A,C,W 三種字元,問組成一個長度為 n(不含 WA,即 W 後一個字元不能為 A ) 的字串,總共有多少種方案?(T組資料)

輸入描述:

先輸入一個 T,表示有 T 組資料。
然後輸入需要組成字串的長度 n_i  (1 <= i <= T)
1 <= T <= 10,1 <= n_i <= 10

輸出描述:

對於每個 n_i 輸出對應的答案

輸入

2
1
2

輸出

3
8

解題思路

資料也沒多少,手算也可以算出來的吧。。。
這一題也算是一種dp的題吧,用f[i]來表示組成長度為i的方案數。長度為i的方案數為f[i-1],第i個位置可以有A、W、C,三種選擇,故為f[i-1]*3,又因為不能出現WA,所以要減去最後兩個為WA的方案數。最後兩個為WA則前面i-2個有f[i-2]中方案數,故f[i]=f[i-1]*3-f[i-2],f[1]=3,f[2]=8.

#include <iostream>
using namespace std;
int main()
{
    int t, n, f[15];
    scanf("%d", &t);
    while (t--)
    {
        scanf("%d", &n);
        f[1] = 3;
        f[2] = 8;
        for (int i = 3; i <= n; i++)
            f[i] = f[i - 1] * 3 - f[i - 2];
        printf("%d\n", f[n]);
    }
    return 0;
}