zoukankan      html  css  js  c++  java
  • 2825 codevs危险的组合(递推)

    2825 危险的组合

    时间限制: 1 s
    空间限制: 64000 KB
    题目等级 : 钻石 Diamond
    题目描述 Description

    有一些装有铀(用U表示)和铅(用L表示)的盒子,数量均足够多。要求把N个盒子放成一行,但至少有3个U放在一起,有多少种方法?

    输入描述 Input Description

    包含一个整数N

    输出描述 Output Description

    输出一个整数表示方法数。

    样例输入 Sample Input

    样例1:4

    样例2:5

    样例输出 Sample Output

    样例1:3

    样例2:8

    数据范围及提示 Data Size & Hint

    对于100%的数据(3<=N<=30)

    样例1解释:

    UUUL、LUUU、UUUU

    样例2解释:

    UUUUL、UUUUU、UUULU、UUULL、LUUUU、LUUUL、ULUUU、LLUUU

    【思路】 

    当加入第n个的时候有两种情况(1 )前面的n-1个已经满足了,而第n个要么是u要么是l,所以这这情况有 2*num(n-1)种

    当加入第n个的时候,前面的n-1种没有满足情况,所以n-1个前面几个排列一定是 uul。。。 所以在前面加入一个u正好满足要求 就是UUUl...(第一个u是新加的 )

    而后面n-4个一共的情况(包括三个u没有挨在一起的)pow(2,n-4)种情况,再减去num(n-4)(也就是减去n-4个排列满足三个u在一起的情况,因为我们现在是找n-1个不满足的情况)。

    就推出递推式了  做出来了  爽QWQ

    【代码】

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstdlib>
     4 #include<cmath>
     5 using namespace std;
     6 int n;
     7 int num(int x)
     8 {
     9     if(x<3)return 0;
    10     if(x==3)return 1;
    11     if(x==4)return 3;
    12     return 2*num(x-1)+pow(2,x-4)-num(x-4); 
    13 }
    14 int main()
    15 {
    16     scanf("%d",&n);
    17     printf("%d",num(n));
    18     return 0;
    19 }
  • 相关阅读:
    PHP的GD库
    PHP正则表达式
    Redis学习笔记
    C++的vector对象
    Python的with用法理解
    python 类属性与方法
    python lambda表达式
    Python3的decode()与encode()
    PHP的魔法方法__set() __get()
    MySQL的基本知识 -- 函数
  • 原文地址:https://www.cnblogs.com/zzyh/p/6638877.html
Copyright © 2011-2022 走看看