递推,最近发现自己做递推的题总是没有思路。下周多练习。
对于f(n)可以在第n个位置为男生,此时共有f(n-1)种情况;若在第n个位置为女生,因此第n-1个位置也必须为女生。此时有两种情况,一种情况是在f(n-2)后直接添加FF,另一种情况是在MF后添加FF将本来错误的串改为正确的,这种情况数量为f(n-4)(前n-4排列满足要求)。因此,f(n) = f(n-1) + f(n-2) + f(n-4)。题目数据超过64位,大数AC。1 #include2 #include 3 4 #define MAXLEN 1200 5 #define MAXNUM 1002 6 7 char buf[MAXNUM][MAXLEN]; 8 9 int main() {10 int i, j;11 12 memset(buf, 0, sizeof(buf));13 buf[1][0] = 1;14 buf[2][0] = 2;15 buf[3][0] = 4;16 buf[4][0] = 7;17 18 for (i=5; i =0; --j)31 printf("%d", buf[i][j]);32 printf("\n");33 }34 35 return 0;36 }