牛客網 - 不想再WA了(遞推)
阿新 • • 發佈:2019-01-02
題目連結: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; }