【题解】
假设有一种合法的放置方案,有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).
标签:aa,BigInteger,递归,大数,合法,放置,sc,new,hdu1297 From: https://www.cnblogs.com/xiaohuangTX/p/18188390