既然不能存在abc三個字母連續出現的情況,那麼假定每乙個字母都需要由在他之前的兩個字母決定,那麼就會有兩種情況:前兩個字母相等和前兩個字母不等。
如果前兩個字母相等,那麼那兩個字母之前的組合可能性都是一樣的,後乙個字母的狀態只相當於複製了前乙個狀態,比如a到aa,b到bb,c到cc,都是三種情況,那麼第三個字母是任意情況。
如果前兩個字母不等,那麼就需要後乙個字母的狀態減去前乙個字母的狀態(減去相等情況),第三個字母只能是前兩個字母裡選乙個,是兩種情況。
所以每乙個狀態都由兩個部分組成,因此存在遞推式dp[i]=2*(dp[i-1]-dp[i-2])+3*dp[i-2]
//#include#include #include #include #include #include #include #include #include #include #define determination main
#define lldin(a) scanf_s("%lld", &a)
#define println(a) printf("%lld\n", a)
#define reset(a, b) memset(a, b, sizeof(a))
const int inf = 0x3f3f3f3f;
using namespace std;
const double pi = acos(-1);
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
const int mod = 1000000007;
const int tool_const = 19991126;
const int tool_const2 = 2000;
inline ll lldcin()
while (c >= '0' && c <= '9')
return si * tmp;
}///untersee boot ixd2(1942)
/**although there will be many obstructs ahead,
the desire for victory still fills you with determination..**/
/**last remote**/
ll dp[50000];
int determination()
字串基本操作
include unsigned int strlenth char s 獲取字串長度 return lenth void strcopy char target,char source 字串拷貝 int strcompare char s,char t 字串比較,s t,則返回1 s t,則返回0...
字串基本操作
遞迴求字串長度 int recurlength char str 字串中最後乙個引數的長度 int lastwordlen char str,int len int lastwordlen char str return lastlen 字串記憶體的拷貝 實現memmove函式 char my me...
字串基本操作
判斷字串開頭結尾字元 string.startswith l 判斷字串是否以l開頭 string.endswith n 判斷字串是否以n結尾 返回字串中字元的位置 string.find x 找到這個字元返回下標,多個時返回第乙個 不存在的字元返回 1 string.index x 找到這個字元返回...