Children's Queue (recursive)
Children's Queue
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission (s): 12101 Accepted Submission (s): 3953
Problem Description There are missing students in PHT School. one day, the headmaster whose name is PigHeader wanted all students stand in a line. he prescribed that girl can not be in single. in other words, either no girl in the queue or more than one girl stands side by side. the case n = 4 (n is the number of children) is like
FFFF, FFFM, MFFF, FFMM, MFFM, MMFF, MMMM
Here F stands for a girl and M stands for a boy. the total number of queue satisfied the headmaster's needs is 7. can you make a program to find the total number of queue with n children?
Input There are multiple cases in this problem and ended by the EOF. In each case, there is only one integer n means the number of children (1 <=n <= 1000)
Output For each test case, there is only one integer means the number of queue satisfied the headmaster's needs.
Sample Input
123
Sample Output
124
Question: There are n locations where boys and girls are waiting in line and at least two girls are required to be together. Thought: set f [n] to indicate the situation of n people. Case 1: Add a boy after f [n-1]; Case 2: Add two girls after f [N-2; case 3: add three girls to the end of f [n-3] (equivalent to f [n-4] Number); so: f [n] = f [n-1] + f [N-2] + f [n-4]; because of the large data, so the use of large number addition can be. Reprinted please indicate the source: Find and star child questions link: http://acm.hdu.edu.cn/showproblem.php? Pid = 1, 1297
#include
#include
int f[1005][105];void init(){ memset(f,0,sizeof(f)); f[0][1]=1; f[1][1]=1; f[2][1]=2; f[3][1]=4; for(int i=4;i<=1000;i++) { int add=0; for(int j=1;j<=100;j++) { f[i][j]=f[i-1][j]+f[i-2][j]+f[i-4][j]+add; add=f[i][j]/10000; f[i][j]%=10000; if(add==0&&f[i][j]==0)break; } }}int main(){ int n; init(); while(scanf("%d",&n)!=EOF) { int k=100; while(!f[n][k])k--; printf("%d",f[n][k--]); for(;k>0;k--) { printf("%04d",f[n][k]); } printf("\n"); } return 0;}