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