• 危险的组合


    【题目描述】

    有一些装有铀(U)和铅(L)的盒子,要求把N个盒子放成一行,但至少有3个U放在一起,询问有多少种放置方案。

    【输入描述】

    输入一个整数N。

    【输出描述】

    输出一个整数,表示方案数。

    【样例输入】

    样例1:

    4

    样例2:

    5

    【样例输出】

    样例1:

    3

    样例2:

    8

    【数据范围及提示】

    对于100%的数据,3 <= N <= 30。

    样例1:

    UUUL、LUUU、UUUU。

    样例2:

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

    源代码:
    
    #include<cstdio>
    int n,num,f[31]={0};
    int main()
    {
        scanf("%d",&n);
        f[3]=1;
        num=1;
        for (int a=4;a<=n;a++)
        {
            f[a]=2*f[a-1]+num-f[a-4];
            num=num<<1;
        }
        printf("%d",f[n]);
        return 0;
    }
    
    /*
        挺妙的一道题:
            N个箱子无非有以下两种情况:
            (1)去掉第一个箱子后依然符合条件,则剩余的N-1个箱子有f[N-1]种排列方案数。
            (2)去掉第一个箱子后不符合条件,则第2、3、4个箱子一定是U、U、L,则剩余的N-4个箱子有2^(N-4)-f[N-4]种排列方案数。
        综上所述,则状态转移方程为:
            f[a]=2*f[a-1]+2^(a-4)-f[a-4]。
    */
  • 相关阅读:
    luogu P5494 【模板】线段树分裂
    珂朵莉树(ODT)
    luogu P5787 二分图 /【模板】线段树分治
    线段树
    luogu P1450 [HAOI2008]硬币购物
    树形DP
    luogu P3047 [USACO12FEB]Nearby Cows G
    1069: 向Z同学学习
    1067: 有问题的里程表
    1066: 字符分类统计
  • 原文地址:https://www.cnblogs.com/Ackermann/p/5558483.html
Copyright © 2020-2023  润新知