传送门: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): 16830    Accepted Submission(s): 5643

Problem Description

There are many 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

1 2 3

Sample Output

1 2 4

题目解释:

有n个位置,男孩女孩排队,要求有女孩的话,至少要2个女孩在一起。

解题思路:

1)如果最后一个是男孩,前面n-1是合法队列,则方法数为f(n-1),如果前面n-1个不是合法队列,则这n个也不可能是合法队列

2)如果最后一个是女孩,那么第n-1个必定是女孩

<1>如果前n-2个是合法队列,方法数为f(n-2)

<2>如果前n-2个不是合法队列,那满足条件的队列应该是f(n-4)+男+女,方法数为f(n-4)

所以f(n)=f(n-1)+f(n-2)+f(n-4)

注意:n的值最大是1000,结果非常庞大,要用到大数加法的思想,可以压1位存或者压4位存,压4位存的时候要注意当过程中的“余数”不足4位的时候要前面补0.

看下最大的结果,别怕哈哈哈:12748494904808148294446671041721884239818005733501580815621713101333980596197474744336199742452912998225235910891798221541303838395943300189729514282623665199754795574309980870253213466656184865681666106508878970120168283707307150239748782319037

ac代码:

压4位存

#include<iostream>
using namespace std;
int main()
{int arr[1001][101]={0};arr[0][1]=1;arr[1][1]=1;arr[2][1]=2;arr[3][1]=4;for(int i=4;i<1001;i++){for(int j=1;j<101;j++){arr[i][j]+=arr[i-1][j]+arr[i-2][j]+arr[i-4][j];//arr[i][j+1]=arr[i][j]/10000;//更新商arr[i][j]=arr[i][j]%10000;//更新余数}}int num;while(cin>>num){int k=100;for(;arr[num][k]==0;k--);//找到待输出的商cout<<arr[num][k];for(;k>1;){k--;cout.width(4);cout.fill('0');cout<<arr[num][k];}cout<<endl;}
}

压1位存

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
long long s[1010][1005];
int main()
{int i,j,n;memset(s,0,sizeof(s));s[1][0]=1;s[2][0]=2;s[3][0]=4;s[4][0]=7;for(i=5;i<=1000;i++){for(j=0;j<=1000;j++)s[i][j]=s[i-1][j]+s[i-2][j]+s[i-4][j];for(j=0;j<=1000;j++){if(s[i][j]>=10){s[i][j+1]+=s[i][j]/10;s[i][j]%=10;}}}while(cin>>n){i=1000;while(i--){if(s[n][i]!=0)break;}cout<<s[n][i];i--;for(;i>=0;i--)printf("%d",s[n][i]);cout<<endl;}return 0;
}

hdoj1297Children‘s Queue(递推+大数加法)相关推荐

  1. UVA11375火柴(递推+大数)

    题意:       给你n根火柴,问你能组成多少种数字,比如3根可以组成1或者7,组成的数字中不能有前导0, 思路:       我们开一个数组,d[i]记录用i跟火柴可以组成多少种数字,则更新状态是 ...

  2. UVA11161 Help My Brother (II)【大数+递推】

    A Fibonacci sequence is calculated by adding the previous two members of the sequence, with the firs ...

  3. UVA10359 Tiling【大数+递推】

    In how many ways can you tile a 2 × n rectangle by 2 × 1 or 2 × 2 tiles? Here is a sample tiling of ...

  4. POJ 1737 Connected Graph (大数+递推)

    题目链接: http://poj.org/problem?id=1737 题意: 求 \(n\) 个点的无向简单(无重边无自环)连通图的个数.\((n<=50)\) 题解: 这题你甚至能OEIS ...

  5. UVA10862 - Connect the Cable Wires(递推 + java的大数)

    UVA10862 - Connect the Cable Wires(递推 + java的大数) 题目链接 题目大意:给你n座房子位于一条直线上,然后仅仅给你一个cable service.要求每座房 ...

  6. 2019 ICPC Asia Nanjing Regional C.Digital Path(拓扑排序递推DP)

    整理的算法模板合集: ACM模板 题目传送门 三段题面,只有第三段是有用的-前两段又长单词又难懂,就是在讲故事...不过针对四种情况给出四个图帮助我们理解题意是真的赞,可能出题人怕我们看不懂吧(第一句 ...

  7. P6134 [JSOI2015]最小表示(拓扑排序递推 + bitset优化,可达性统计变种)

    整理的算法模板合集: ACM模板 P6134 [JSOI2015] 题目要求删除一条边整个图的连通性是不受影响的,也就是说如果我们要删除边(x,y)(x,y)(x,y),删除以后整个图的连通性不受影响 ...

  8. POJ 3046 Ant Counting(递推,和号优化)

    计数类的问题,要求不重复,把每种物品单独考虑. 将和号递推可以把转移优化O(1). f[i = 第i种物品][j = 总数量为j] = 方案数 f[i][j] = sigma{f[i-1][j-k], ...

  9. POJ 2231 Moo Volume(递推、前缀和)

    题外话: POJ 2231 Moo Volume 题意: 解题过程: AC代码: 题外话: emm--第三套题好像综合了其他OJ的题目蛤,那么我就把题目分开了发了蛤蛤-- POJ 2231 Moo V ...

  10. 递推DP UVA 1366 Martian Mining

    题目传送门 1 /* 2 题意:抽象一点就是给两个矩阵,重叠的(就是两者选择其一),两种铺路:从右到左和从下到上,中途不能转弯, 3 到达边界后把沿途路上的权值相加求和使最大 4 DP:这是道递推题, ...

最新文章

  1. 技术图文:C# 语言中的扩展方法
  2. 通过JDBC进行简单的增删改查(二)
  3. curl请求模拟post发送json
  4. C++Pascal‘s Triangle杨辉三角的实现算法
  5. GitLab私服搭建及使用实践
  6. Java常用API(二)String
  7. update 后面能接子查询吗_只用身份证能查询CPA成绩吗?查询步骤不能忘
  8. wordpress里mySql服务器的配置
  9. nucleo stlink 固件_自制nucleo,可以随意更换芯片,支持stlink,板载usbisp
  10. Subscription
  11. vue里面rules_vue如何使用rules对表单字段进行校验
  12. 一个Https网站发送Http的 ajax请求的解决方法
  13. Java多线程(四)——多线程数据隔离与共享
  14. 程序员为什么需要学会Markdown
  15. dcs world f15c教学_苏教版译林牛津高中英语必修1-5选修6-11课文听力MP3音频字幕课件教案试题电子课本优质课教学视频...
  16. 微信小程序 生成二维码
  17. 使用cmd命令 关机
  18. word封面下划线对齐
  19. 相机标定基本理论——旋转矩阵基本性质
  20. 华为云计算之双活容灾

热门文章

  1. 【java与智能设备】01_1Android简介与环境搭建
  2. python astype category_python类别比较型图表柱形图系列堆积柱形图系列
  3. 为什么以太网有最短帧长度的要求_线束工程师:车载以太网介绍
  4. 计算机是根据用户名,根据用户名移动计算机账号
  5. java编写个倒计时_怎么编写一个倒计时java程序?求具体步骤!
  6. 利用wsdl.exe生成webservice代理类
  7. Exchange Server DAG群集状态部分在线
  8. eclipse生成ant build.xml打war包
  9. 逸管家坚守诚信是中小企业走上持续发展道路的准则
  10. JS前台页面获取值的技巧