zoukankan      html  css  js  c++  java
  • 格子刷油漆(dp)-----------蓝桥备战系列


    标题:格子刷油漆

        X国的一段古城墙的顶端可以看成 2*N个格子组成的矩形(如图1所示),现需要把这些格子刷上保护漆。

        你可以从任意一个格子刷起,刷完一格,可以移动到和它相邻的格子(对角相邻也算数),但不能移动到较远的格子(因为油漆未干不能踩!)

        比如:a d b c e f 就是合格的刷漆顺序。

        c e f d a b 是另一种合适的方案。

        当已知 N 时,求总的方案数。当N较大时,结果会迅速增大,请把结果对 1000000007 (十亿零七) 取模。

        输入数据为一个正整数(不大于1000)

        输出数据为一个正整数。

    例如:
    用户输入:
    2
    程序应该输出:
    24

    再例如:
    用户输入:
    3
    程序应该输出:
    96

    再例如:
    用户输入:
    22
    程序应该输出:
    359635897


    资源约定:
    峰值内存消耗 < 64M
    CPU消耗  < 1000ms


    请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。

    所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。

    注意: main函数需要返回0
    注意: 只使用ANSI C/ANSI C++ 标准,不要调用依赖于编译环境或操作系统的特殊函数。
    注意: 所有依赖的函数必须明确地在源文件中 #include <xxx>, 不能通过工程设置而省略常用头文件。

    提交时,注意选择所期望的编译器类型(千万不要混淆c和cpp)。

    代码:

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #include<queue>
    #include<stack>
    #include<map>
    #include<set>
    #include<vector>
    #include<cmath>
    #define MOD 1000000007
    
    const int maxn=1e5+5;
    typedef long long ll;
    using namespace std;
    ll a[maxn],b[maxn];
    
    int main()
    {
        int i,n;
        scanf("%d",&n);
     
      	b[1]=1;
        for (i=2;i<=n;i++)
            b[i]=(b[i-1]*2%MOD);
        a[1]=1;a[2]=6;
        for (i=3;i<=n;i++)
            a[i]=(2*a[i-1]+b[i]+4*a[i-2])%MOD;
        ll sum=4*a[n];
        for (i=2;i<n;i++)
          {
            sum+=((8*b[n-i]*a[i-1])%MOD+(8*a[n-i]*b[i-1])%MOD)%MOD;
            sum %= MOD;
          } 
            if(n==1)  sum=2 ; 
        printf("%lld
    ",sum);
      
        return 0;
    } 
    
  • 相关阅读:
    数据类型装换
    变量及数据类型
    27 网络通信协议 udp tcp
    26 socket简单操作
    26 socket简单操作
    14 内置函数 递归 二分法查找
    15 装饰器 开闭原则 代参装饰器 多个装饰器同一函数应用
    12 生成器和生成器函数以及各种推导式
    13 内置函数 匿名函数 eval,exec,compile
    10 函数进阶 动态传参 作用域和名称空间 函数的嵌套 全局变量
  • 原文地址:https://www.cnblogs.com/Staceyacm/p/10781761.html
Copyright © 2011-2022 走看看