hdu1297大数递归

【题解】

  假设有一种合法的放置方案,有n-1个位置,那么我们在末尾多放一个M,必定是一个合法的方案。(放F则不一定)

  有n-2个位置的合法放置方案,我们在末尾多放FF,必定是一个合法的方案。(其实放MM也是必定合法的,但是会和上一种情况重复,不能考虑进去。FM和MF则不能保证合法)

import java.math.BigInteger;
import java.util.Scanner;

public class hdu1297 {

    public static void main(String[] args) {
        // TODO 自动生成的方法存根
        BigInteger aa[] = new BigInteger[1001];
        aa[1] = BigInteger.ONE;
        aa[2] = new BigInteger("2");
        aa[3] = new BigInteger("4");
        aa[4] = new BigInteger("7");
        for (int i = 5; i < aa.length; i++) {
            aa[i] = aa[i-1].add(aa[i-2]).add(aa[i-4]);            
        }
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            int x = sc.nextInt();
            System.out.println(aa[x]);    
        }
        sc.close();
    }
}

 

  有n-2个位置的不合法放置方案,如果能够通过放置两个位置变成合法的,那么它一定以MF结尾,我们可以放置FF或者FM。也就是在n-4个位置的合法方案后面放置MFFM或者MFFF,但是MFFM会与第一种情况重复,所以我们只计算MFFF的。

  那么我们就可以得出递推式:f[i]=f[i-1]+f[i-2]+f[i-4],(i>4).

 

posted @ 2024-05-12 23:04  XiaohuangTX  阅读(1)  评论(0编辑  收藏  举报