zoukankan      html  css  js  c++  java
  • 【NOIp模拟】【dp】俄罗斯方块

    Description

    小松鼠开心地在树之间跳跃着,突然她停了下来。因为眼前出现了一个 拿着专克超萌小松鼠的法宝————超萌游戏机的游客!  超萌游戏机之所以拥有这个名字,是因为它的屏幕是一个n × 2的矩形。 小松鼠接过游戏机,开始了她的第一个游戏:俄罗斯方块。  考虑到小松鼠的智商,游戏机里的方块只有下面四种,方块按顺序下落,

    *       *              **
    **     **     **        *
    *      *      **        *
    

    (我尽力了)
    可以在任意时刻(甚至是下落前)对其进行不限次数的旋转操作。  由于四种方块最小宽度都为2,因此下落的时候在水平方向上是不能够移 动的。我们称当前方块下落的过程完成了,当且仅当其再往下移动一个单 位就会与之前覆盖的方块有部分相重叠。小松鼠想要知道,在这个n×2的 游戏界面中,一共会出现多少种游戏状态。游戏状态指单次方块下落的过 程完成后,不要求游戏结束(即不要求第1行非空),且界面中出现的必须 是完整的方块。  两种游戏状态被认为是相同的,当且仅当游戏界面中的每一个格子两种 状态下被覆盖的方块类型都相同(或都不被覆盖)。
    再次考虑到小松鼠的智商,答案模109 + 7 输出。

    Input

    一行一个数n,表示游戏界面的长度。

    Output

    一个数,表示游戏界面的状态数在模109 + 7意义下的值。

    Constraints

    对于前10%,n <= 10。
    对于前30%,n <= 1000。
    对于前60%,n <= 100000。
    对于100%,n <= 1000000。

    Code

    #include <cstdio>
    #include <cstring>
    #include <queue>
    #define INF 100000000
    #define maxn 100000
    #define mo 1000000007
    using namespace std;
    
    int n;
    long long dp[1001000][7],ans=0;
    
    int main(){
        scanf("%d",&n);
        memset(dp,0,sizeof(dp));
        for(int i=1;i<=6;i++) dp[3][i]=1;
        dp[3][4]=0; dp[2][4]=1;
        for(int i=4;i<=n;i++){
            dp[i][1]=(dp[i-3][1]+dp[i-2][2]+dp[i-2][3]+dp[i-3][4]+dp[i-2][5]+dp[i-3][6])%mo;
            dp[i][2]=(dp[i-2][1]+dp[i-3][2]+dp[i-3][3]+dp[i-3][4]+dp[i-3][5]+dp[i-3][6])%mo;
            dp[i][3]=(dp[i-3][1]+dp[i-2][2]+dp[i-2][3]+dp[i-3][4]+dp[i-2][5]+dp[i-3][6])%mo;
            dp[i][4]=(dp[i-2][1]+dp[i-2][2]+dp[i-2][3]+dp[i-2][4]+dp[i-2][5]+dp[i-2][6])%mo;
            dp[i][5]=(dp[i-3][1]+dp[i-3][2]+dp[i-3][3]+dp[i-3][4]+dp[i-3][5]+dp[i-3][6])%mo;
            dp[i][6]=(dp[i-3][1]+dp[i-2][2]+dp[i-2][3]+dp[i-3][4]+dp[i-1][5]+dp[i-3][6])%mo;
        }
        for(int i=2;i<=n;i++)
            for(int j=1;j<=6;j++)
                ans+=dp[i][j]%mo;
        printf("%lld",(ans+1)%mo);
        return 0;
    }
  • 相关阅读:
    Testlink & Redmine组合拳演练
    使用IP欺骗Loadrunner并发测试小结
    程序设计的思想与执行步骤参考
    读《世界是自己的,与他人无关》
    读《A4纸上的奇迹》
    读《流动的盛宴》
    既往不恋,当下不杂,未来不乱——读《怦然心动的人生整理魔法》
    GridCtrl学习笔记(3)一行一行地更新表格,有bug版
    GridCtrl学习笔记(2)寻找自动更新表格的最新数据并把其显示到当前窗口的方法
    GridCtrl学习笔记(1)建立使用GridCtrl的工程
  • 原文地址:https://www.cnblogs.com/leotan0321/p/6081378.html
Copyright © 2011-2022 走看看