暗黑字符串(遞推
阿新 • • 發佈:2018-07-23
ring blank 擴展 for iostream n-2 end 排列 fine
https://www.nowcoder.com/practice/7e7ccd30004347e89490fefeb2190ad2?tpId=85&&tqId=29853&rp=5&ru=/activity/oj&qru=/ta/2017test/question-ranking 題目
其實一開始想法是3^3 = 27減去ABC的排列3 X 2 X 1 = 6,也就是21種。但是從這個角度一直考慮下去,其實是錯的。
應該從n = 2的基礎上分析。首先n = 3是從n =2的基礎上擴展一位,首先我們假設後面兩位是不同的(比如C、A)的那只能後面兩位選其中一位。f(n) = 2 * f(n - 1)。但是考慮到最後兩位一樣的情況,f(n - 1)中有兩位相同的數量,是f(n - 2)數量的個數,因為必須和f(n-2)的最後一位一樣。
1 #include<iostream> 2 #include<cstdio> 3 #include <cctype> 4 #include<algorithm> 5 #include<cstring> 6 #include<cmath> 7 #include<string> 8 #include<cmath> 9 #include<set> 10 #include<vector> 11 #include<stack> 12 #include<queue> 13#include<map> 14 using namespace std; 15 #define ll long long 16 #define mem(a,x) memset(a,x,sizeof(a)) 17 #define se second 18 #define fi first 19 const int INF= 0x3f3f3f3f; 20 const int N=1e7+5; 21 22 ll dp[34]; 23 int n; 24 25 int main() 26 { 27 while(cin>>n) 28 { 29 30 dp[1]=3; 31 dp[2]=9; 32 for(int i=3;i<=n;i++) 33 dp[i]=2*dp[i-1]+dp[i-2]; 34 cout<<dp[n]<<endl; 35 36 } 37 }
暗黑字符串(遞推