题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1297
题意:有n个位置,男孩女孩排队,要求女孩至少要2个在一起。
思路:设f[n]表示,n个人的情况。情况一、在f[n-1]的情况后面加一个男孩;情况二、在f[n-2]的情况后面加两个女孩;情况三、在f[n-3]最后是男孩(等价于在f[n-4]个个数)的后面加三个女孩; 所以:f[n]=f[n-1]+f[n-2]+f[n-4];由于数据比较大,所以采用大数加法就可以了。
思路来自:寻找&星空の孩子
import java.util.*;
import java.math.*;
import java.text.*;
import java.io.*; public class Main
{public static void main(String[] args) {Scanner cin=new Scanner(new BufferedInputStream(System.in));BigInteger[] a = new BigInteger [1000+5];a[1]=BigInteger.ONE;a[2]=BigInteger.valueOf(2);a[3]=BigInteger.valueOf(4);a[4]=BigInteger.valueOf(7);for(int i=5;i<=1000;i++) a[i]=a[i-1].add(a[i-2]).add(a[i-4]);// int T=cin.nextInt();while(cin.hasNext()){int n=cin.nextInt();System.out.println(a[n]);}}
}