题目链接:http://codeforces.com/problemset/problem/666/A
题目大意:给你一个字符串, 去掉前五个字符, 剩下的字符2 || 3 长度的取, 不能连续2次取相同的, 问这样的取法能取多少组字符
思路:从后往前取,dp[i] 表示 i 以后的字符能合法的取完,每取一次判断后一个是否和他相同, 不相同说明可取, 还有一种情况是abbabba , abb后面还是abb , 但后面可以是
abb|ab|ba|这样的取法, 所以要判断dp[i + 5] 是否为true
1 #include <iostream> 2 #include <cstring> 3 #include <set> 4 #include <cstdio> 5 #include <algorithm> 6 using namespace std; 7 8 char s[10005], a[5], b[5]; 9 int dp[10005]; 10 set <string> p; 11 12 int main() 13 { 14 scanf("%s", s + 1); 15 int len = strlen(s + 1); 16 memset(dp, 0, sizeof(dp)); 17 dp[len + 1] = 1; 18 for(int i = len - 1; i > 5; i--) 19 { 20 if(dp[i + 2]) 21 { 22 if(dp[i + 5]) 23 { 24 dp[i] = 1; 25 26 p.insert(a); 27 } 28 a[0] = s[i], a[1] = s[i + 1], a[2] = '