HDU 1297 Children’s Queue
来源:互联网 发布:centos yum 网卡驱动 编辑:程序博客网 时间:2024/06/06 03:30
题意:
有n个人站成一排,其中女生不能单独一个人站,男生:M、女生:F。就不能有例如:FM, MF, MFM这样的排列存在,问有多少种站队的方法。
思路:
其实也是一个递推。
f[i]代表排列i个人的合法序列。
f[i] = f[i - 1] + f[i - 2] + f[i - 4]//i >= 5
1.在 i - 1合法序列后面加一个男生是合法的。
2.在以F结尾的 i - 1 合法序列后面加一个F也是合法的,而且以F为结尾的 i - 1 合法序列的个数可以转化为 i - 2合法序列的个数。(因为所有以F为结尾的i - 1合法序列都是从 i - 2合法序列的全体加上一个F得到的)。
3.而一个不合法的序列也可以通过添加两个M变成合法序列(为什么不加一个M,因为会造成重复,比如FMM,就可以通过FM + M,还可以通过f[i - 2]),而这种不合法的序列只有这一种形式是可以的:(合法序列) + M + F。
Code:
import java.math.BigInteger;import java.util.Scanner;public class Main{ static int N = (int) (1e3 + 5); static BigInteger[] f = new BigInteger[N]; public static void main(String args[]) { Scanner cin = new Scanner(System.in); f[1] = bv(1); f[2] = bv(2); f[3] = bv(4); f[4] = bv(7); for(int i = 5; i <= 1000; ++i) { f[i] = f[i - 1].add(f[i - 2]).add(f[i - 4]); } while(cin.hasNext()) { int n = cin.nextInt(); println(f[n]); } } public static void println(Object o) { System.out.println(o); } public static BigInteger bv(int n) { return BigInteger.valueOf(n); }}
0 0
- hdu 1297 Children’s Queue
- 【HDU 1297】Children’s Queue
- HDU 1297 - Children’s Queue
- HDU 1297 Children’s Queue
- HDU 1297 Children’s Queue
- hdu 1297 Children’s Queue
- HDU 1297 Children’s Queue
- HDU 1297 Children’s Queue
- hdu 1297 Children’s Queue
- hdu - 1297 Children’s Queue
- hdu 1297 Children’s Queue
- hdu 1297 Children’s Queue
- HDU 1297 Children’s Queue
- HDU 1297 Children’s Queue
- HDU 1297 Children’s Queue
- HDU 1297 Children’s Queue
- HDU 1297:Children’s Queue
- HDU 1297 Children’s Queue
- 经验总结51--redis内存数据库
- 闭包-JS
- HTML中的Position定位的区别
- js switch...case语句与if...else性能比较
- 视图控制器对象的生命周期
- HDU 1297 Children’s Queue
- 计算机组成原理入门(三)
- Leetcode:Excel Sheet Column Title
- 物联12:rfid通信方式
- HTTP协议
- BZOJ 3614 Heoi2014 逻辑翻译 分治 = =HEOI2014全AC达成?
- Fragment实例
- Android Paint之 setXfermode PorterDuffXfermode 讲解
- Python基础10 反过头来看看