您的位置:首页 > 产品设计 > UI/UE

hdu 1297 Children’s Queue

2010-10-04 22:51 337 查看
http://acm.hdu.edu.cn/showproblem.php?pid=1297

公式的推导:

1)m

2)mff

3)mfff

a:安全序列后加ff或者m,结果仍然安全。

b:不安全序列后加ff可使其安全,虽然mf加f也能得到安全序列,但与a情况重复。

故:公式a
=a[n-1]+a[n-2]+a[n-4];

另外:还要考虑大数相加的问题:因为:n=1000时输出结果:

12748494904808148294446671041721884239818005733501580815621713101333980596197474

74433619974245291299822523591089179822154130383839594330018972951428262366519975

47955743099808702532134666561848656816661065088789701201682837073071502397487823

19037

1297 Children’s Queue

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 1001

char str1

;
void big_add(char *str1,char *str2,char *str3)
{
int i,j,temp,k,carry;
char ch;
int len1=strlen(str1),len2=strlen(str2);
k=carry=0;
for(i=len1-1,j=len2-1;i>=0,j>=0;i--,j--,++k)
{
temp=str1[i]-'0'+str2[j]-'0'+carry;
carry=temp/10;
str3[k]=temp%10+'0';
}
while(i>=0)
{
temp=str1[i--]-'0'+carry;
str3[k++]=temp%10+'0';
carry=temp/10;
}
while(j>=0)
{
temp=str2[j--]-'0'+carry;
str3[k++]=temp%10+'0';
carry=temp/10;
}
if(carry)
str3[k++]=carry+'0';
str3[k]='\0';
for(i=0,j=k-1;i<j;++i,--j){ ch=str3[i];str3[i]=str3[j];str3[j]=ch;}
}
int main()
{
int i,n;

memset(str,'0',sizeof(str));//初始化a,打表
strcpy(str[0],"1");
strcpy(str[1],"1");
strcpy(str[2],"2");
strcpy(str[3],"4");
for(i=4;i<=1000;i++)
{
char te[1001];
big_add(str[i-1],str[i-2],te);
big_add(te,str[i-4],str[i]);
}

while(scanf("%d",&n)!=EOF)
printf("%s\n",str
);
return 0;
}


30342732010-10-04 22:06:21Accepted129715MS1140K1053 BG++
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: