Problem Link:http://acm.hdu.edu.cn/showproblem.php?pid=1297
Children’s Queue
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 10591 Accepted Submission(s): 3407
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?
1 2 3
1 2 4
#include<stdio.h>
int f[1001][246];
void init()
{
int i,j,k,g;
k=1;
f[1][1]=1;f[1][0]=1;//f[i][0]表示第i个数位数
f[2][1]=2;f[2][0]=1;
f[3][1]=4;f[3][0]=1;
f[4][1]=7;f[4][0]=1;
for(i=5;i<=1000;i++)
{
g=0;
for(j=1;j<=k;j++)
{
f[i][j]=f[i-1][j]+f[i-2][j]+f[i-4][j]+g;
g=f[i][j]/10;
f[i][j]%=10;
f[i][j+1]=g;
}
while(f[i][j]>0)
{
k++;
f[i][j+1]=f[i][j]/10;
f[i][j]%=10;
j++;
}
f[i][0]=k;
}
}
int main()
{
int n,i;
init();
//printf("%d\n",f[1000][0]);==245 先开较大的数组在输出最大的位数 调整
while(scanf("%d",&n)!=EOF)
{
for(i=f[n][0];i>=1;i--)
printf("%d",f[n][i]);
printf("\n");
}
return 0;
}