zoukankan      html  css  js  c++  java
  • 危险的组合

    题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=88159#problem/M

    题意:

           n个盒子摆放成一排,当有3个以上U摆放在一起的时候,就会有危险,求总共有多少种危险的情况。

    案例:

          Sample Input

          4

          5

          0

          Sample Output

          3

          8

    分析:

           这题思路跟之前发布的不容易事件类似。

          每放置一个新的盒子,都对应2种情况:设dp[n]=当盒子数目为n的情况下,符合要求(出现连续三个U)的放置方法的情况个数。
          1. 前面n-1个盒子已经能符合要求,则第n个盒子无论是U还是L,都满足情况。情况有(2*dp[n-1])种。
          2. 前面n-1个盒子不能符合要求,即只有最后4个满足情况LUUU并且前面并没有连续的三个U的情况才能满足情况。有((1<<(n-4))-dp[n-4])种情况。

          (1<<(n-4))为n-4个盒子放置的总情况数,dp[n-4]为n-4个盒子放置出现危险(有连续三个U出现)的情况数。最后四个盒子仅一种摆法,可忽略。
          状态转移方程:

                            dp[n]=2*dp[n-1]+(1<<(n-4))-dp[n-4]

    源代码:

     1 #include<cstdio>
     2 #include<cstring>
     3 long long dp[100];
     4 int n,ans;
     5 int main()
     6 {
     7     memset(dp,0,sizeof(dp));
     8     dp[3]=1;
     9     dp[4]=3;
    10     for(int i=5;i<=100;i++)//记录排列i个盒子方式
    11     {
    12         dp[i]=2*dp[i-1]+(1<<(i-4))-dp[i-4];
    13     }
    14     while(scanf("%d",&n)&&n)
    15         printf("%lld
    ",dp[n]);
    16     return 0;
    17 }
  • 相关阅读:
    [Linux]软件目录
    [Linux]查看Linux内核及发行版本
    [S7706]华为ACL
    [S7706]华为配置DHCP
    QML-密码管理器
    QML-AES加解密小工具
    LaTex中文article模板(支持代码、数学、TikZ)
    Memo-Tech
    VIM学习笔记
    CodeForces 674C Levels and Regions
  • 原文地址:https://www.cnblogs.com/huaszjh/p/4744464.html
Copyright © 2011-2022 走看看