前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >HDOJ/HDU 1297 Children’s Queue(推导~大数)

HDOJ/HDU 1297 Children’s Queue(推导~大数)

作者头像
谙忆
发布2021-01-21 15:55:12
4570
发布2021-01-21 15:55:12
举报
文章被收录于专栏:程序编程之旅程序编程之旅

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个人,站成一排。 有一个要求,(F)女生不能单独一个人站在男生之间。 可以没有女生。

输出有多少种站法; (不考虑人与人的不同,只考虑位置和男女区别) (如果一排以MF结尾是不合法的)

分析: 假如n个人的站法为db[n]; 由前面的推导出db[n]。 db[n-1]结尾添加一个M,是一定可以的。 db[n-2]结尾添加FF,也是一定可以的。 添加MF不可以,添加MM也是可以的(但是这个情况和db[n-1]中重复了),添加FM也是和db[n-1]+M重复了。

在不可以序列后面加上FF(MF不可以,加上FF),成为合法, 所以db[n-4]后面+MFFF可以, 其实加一个F也能构成合法,但是这种情况包含在db[n-2](相当与+FF)里面;

所以递推方程式db[n] =db[n-1] + db[n-2] + db[n-4];

db[i] 中保存的都是合法序列数。

Java大数秒A~~~

代码语言:javascript
复制
import java.math.BigInteger;
import java.util.Scanner;

public class Main{
    static BigInteger db[] = new BigInteger[1001];
    public static void main(String[] args) {
        dabiao();
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            int n =sc.nextInt();
            System.out.println(db[n]);
        }
    }
    private static void dabiao() {
        db[0]=new BigInteger("1");
        db[1]=new BigInteger("1");
        db[2]=new BigInteger("2");
        db[3]=new BigInteger("4");
        db[4]=new BigInteger("7");
        for(int i=5;i<db.length;i++){
            db[i]=db[i-1].add(db[i-2]).add(db[i-4]);
        }
    }
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-05-21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档