zoukankan      html  css  js  c++  java
  • [蓝桥杯][2013年第四届真题]格子刷油漆

    时间限制: 1Sec 内存限制: 128MB 提交: 13 解决: 3

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


    你可以从任意一个格子刷起,刷完一格,可以移动到和它相邻的格子(对角相邻也算数),但不能移动到较远的格子(因为油漆未干不能踩!) 
    比如:a  d  b  c  e  f  就是合格的刷漆顺序。 
    c  e  f  d  a  b  是另一种合适的方案。 
    当已知  N  时,求总的方案数。当N较大时,结果会迅速增大,请把结果对  1000000007  (十亿零七)  取模。 

    输入
    输入数据为一个正整数(不大于1000) 
    输出
    输出数据为一个正整数。
    样例输入
    3 
    样例输出
    96

    #include<cstring>
    #include<iostream>
    #include<cstdio>
    #define Mod 1000000007
    using namespace std;
    const int maxn = 1001;
    long long d[maxn],A[maxn];
    int main(void)
    {
        int n;
        cin >> n;
        d[1]=1,d[2]=2;
        A[1]=1,A[2]=6;
        if(n==1)
        {
            printf("2");
            return 0;
        }
        for(int i=3;i<=n;i++) d[i]=d[i-1]*2%Mod;
        for(int i=3;i<=n;i++) A[i]=(2*A[i-1]+4*A[i-2]+d[i])%Mod;
        long long sum=0;
        sum+= 4*A[n]%Mod;
        for(int i=2;i<n;i++) 
        {
            sum+=2*(2*d[i-1]*2*A[n-i]%Mod + 2*d[n-i]*2*A[i-1]%Mod)%Mod;
            sum%=Mod;
        }
        printf("%lld",sum);
        return 0;    
    } 
    View Code
  • 相关阅读:
    关于消息队列的使用
    关于Redis中交互的过程
    关于Redis的启动过程
    【分布式】Zookeeper与Paxos
    【分布式】Chubby与Paxos
    【分布式】一致性协议
    【分布式】分布式架构
    【知识积累】try-catch-finally+return总结
    【面试】判断一棵二叉树是否为二叉排序树
    【面试】用两个栈实现队列
  • 原文地址:https://www.cnblogs.com/zuimeiyujianni/p/8863838.html
Copyright © 2011-2022 走看看