杭电1297-Children’s Queue
2013-03-23 23:34
363 查看
这道题是排序问题,可以用递归方法解决。
计算F(n):
一:当最后一个是男孩M时候,前面n-1个随便排出来,只要符合规则就可以,即是F(n-1);
二:当最后一个是女孩F时候,第n-1个肯定是女孩F,这时候又有两种情况:
1)前面n-2个可以按n-2个的时候的规则来,完全可以,即是F(n-2);
2)但是即使前面n-2个人不是合法的队列,加上两个女生也有可能是合法的。当第n-2是女孩而n-3是男孩的情况,可能合法,情况总数为F(n-4);
综上所述:总数F(n)=F(n-1)+F(n-2)+F(n-4);并且,F(0)=1,F(1)=1,F(2)=2,F(3)=4。
但是,题目给的n的范围是1000,如果我们直接处理的话,肯定会超时。。。。
这时,我们想到大数
#include<iostream>
#include<string.h>
using namespace std;
string add(string s1,string s2)
{
int j,l,la,lb;
string max,min;
max=s1;min=s2;
if(s1.length()<s2.length())
{max=s2;min=s1;}
la=max.size();
lb=min.size();
l=la-1;
for(j=lb-1;j>=0;j--,l--)
max[l] += min[j]-'0';
for(j=la-1;j>=1;j--)
if(max[j]>'9')
{max[j]-=10;max[j-1]++;}
if(max[0]>'9')
{max[0]-=10;max='1'+max;}
return max;
}
int main(){
int n,i;
string a[1001];
a[0]="1";
a[1]="1";
a[2]="2";
a[3]="4";
for(i=4;i<1001;++i)
a[i]=add(add(a[i-1],a[i-2]),a[i-4]);
while(cin>>n)
cout<<a
<<endl;
return 0;
}
计算F(n):
一:当最后一个是男孩M时候,前面n-1个随便排出来,只要符合规则就可以,即是F(n-1);
二:当最后一个是女孩F时候,第n-1个肯定是女孩F,这时候又有两种情况:
1)前面n-2个可以按n-2个的时候的规则来,完全可以,即是F(n-2);
2)但是即使前面n-2个人不是合法的队列,加上两个女生也有可能是合法的。当第n-2是女孩而n-3是男孩的情况,可能合法,情况总数为F(n-4);
综上所述:总数F(n)=F(n-1)+F(n-2)+F(n-4);并且,F(0)=1,F(1)=1,F(2)=2,F(3)=4。
但是,题目给的n的范围是1000,如果我们直接处理的话,肯定会超时。。。。
这时,我们想到大数
#include<iostream>
#include<string.h>
using namespace std;
string add(string s1,string s2)
{
int j,l,la,lb;
string max,min;
max=s1;min=s2;
if(s1.length()<s2.length())
{max=s2;min=s1;}
la=max.size();
lb=min.size();
l=la-1;
for(j=lb-1;j>=0;j--,l--)
max[l] += min[j]-'0';
for(j=la-1;j>=1;j--)
if(max[j]>'9')
{max[j]-=10;max[j-1]++;}
if(max[0]>'9')
{max[0]-=10;max='1'+max;}
return max;
}
int main(){
int n,i;
string a[1001];
a[0]="1";
a[1]="1";
a[2]="2";
a[3]="4";
for(i=4;i<1001;++i)
a[i]=add(add(a[i-1],a[i-2]),a[i-4]);
while(cin>>n)
cout<<a
<<endl;
return 0;
}
相关文章推荐
- 杭电ACM 1297 Children’s Queue
- 杭电ACM 1297 Children’s Queue
- 杭电ACM 1297 Children’s Queue
- 杭电1297 Children’s Queue
- 递推—杭电1297 Children’s Queue
- 杭电ACM 1297 Children’s Queue
- 杭电 1297 Children’s Queue .
- 杭电acm 1297 Children's Queue.大数加递归
- 1297 Children’s Queue
- 杭电1297Children’s Queue(大整数加法)
- 【HDU 1297】Children’s Queue
- HDU 1297 Children’s Queue
- 杭电ACM 1297 Children’s Queue
- 【大数递推】HDU 1297——Children’s Queue
- hdu 1297 Children’s Queue
- HDOJ 1297:Children’s Queue
- HDU 1297 Children’s Queue
- hdu 1297 Children’s Queue
- hdu 1297 Children’s Queue
- Children’s Queue HDU - 1297