hdu1297 Children’s Queue (动态规划,n个人排成一列的方案数+高精加)
来源:互联网 发布:吴达洙 知乎 编辑:程序博客网 时间:2024/06/03 17:57
Children’s Queue
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 12548 Accepted Submission(s): 4110
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?
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
Author
SmallBeer (CML)
Source
杭电ACM集训队训练赛(VIII)
Recommend
lcy | We have carefully selected several similar problems for you: 1465 1133 1480 1438 1466
解析:f[i] 表示队列长度为 i 时的方案数,则:f[i]=f[i-1]+f[i-2]+f[i-4]
1.f[i-1]:最后一个为男生,前 i-1 个合法
2.f[i-2]:最后一个为女生,那么前一个必为女生,前 i-2 个合法
3.f[i-4]:最后一个为女生,那么前一个必为女生,i-2为女生,i-3为男生,前 i-4 个合法,这种前 i-2 个不合法的情况下加上最后两个女生就合法了。
代码:
#include<cstdio>#include<algorithm>using namespace std;typedef long long LL;const LL maxn1=1000;const LL maxn2=100;const LL len=1e8;LL f[maxn1+10][maxn2];void add(LL a[],LL b[]){ LL i,last=0; a[0]=max(a[0],b[0]); for(i=1;i<=a[0];i++) { a[i]+=b[i]+last; last=a[i]/len,a[i]%=len;} if(last)a[++a[0]]=last;}int main(){ LL n,i; f[0][0]=1,f[0][1]=1; f[1][0]=1,f[1][1]=1; f[2][0]=1,f[2][1]=2; f[3][0]=1,f[3][1]=4; for(i=4;i<=maxn1;i++) { add(f[i],f[i-1]); add(f[i],f[i-2]); add(f[i],f[i-4]);} while(scanf("%I64d",&n)!=EOF) { printf("%I64d",f[n][f[n][0]]); for(i=f[n][0]-1;i>=1;i--)printf("%08I64d",f[n][i]); printf("\n");} return 0; }
0 0
- hdu1297 Children’s Queue (动态规划,n个人排成一列的方案数+高精加)
- hdu1297 Children’s Queue
- HDU1297:Children’s Queue
- HDU1297 Children’s Queue
- HDU1297 Children’s Queue
- (hdu step 3.1.7)Children’s Queue(求n个人站在一起有m个人必须是连在一起的方案数)
- 【高精度递推】【HDU1297】Children’s Queue
- hdu1297 - Children’s Queue (递推求解 + 高精度)
- HDU 1297 Children’s Queue (DP)
- Children’s Queue(递推)
- HDU---Children's queue(递归解法)
- Children’s Queue 1297 (大数)
- Children’s Queue (大数/高精度)
- 1297 Children’s Queue
- 1297 Children’s Queue
- Children’s Queue .
- ACM--Children’s Queue
- Children’s Queue
- 接口和抽象类的区别—Java
- Vickate_Swift2.0的方法总结 及 与C/OC的语法区别
- 动态规划-------最长公共子序列
- C++字符串(Unicode/TCHAR/WCHAR/ASCII/LPSTR/LPCSTR等转换)
- ASP获取数据库表名、库名、字段名的方法
- hdu1297 Children’s Queue (动态规划,n个人排成一列的方案数+高精加)
- Combination Sum III
- 开源网络框架Volley(3)
- 自定义导航栏的左右按钮
- 字符串的基本操作
- ViewPager的实现:动态添加RadioButton
- 【leetcode】Validate Binary Search Tree 题解三种思路
- 彻底解密C++宽字符:1、从char到wchar_t
- Eclipse快捷键大全