hdu1297大數遞迴

XiaohuangTX發表於2024-05-12

【題解】

  假設有一種合法的放置方案,有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).

相關文章