zoukankan      html  css  js  c++  java
  • du 熊填数字

    面对这种题,自己是一点思路也没有,只好看别的大神的代码了,看了很多,感到转载的这个思路很简单很赞

    http://blog.csdn.net/heaven13483/article/details/8284572

    Problem Description

        du熊这几天使劲的往一个n 行n列的矩阵填0和1这两个数字,n为偶数,而且矩阵由里向外分成了n / 2层。比如n = 6时,矩阵的分层如下:

        du熊填数时有一个要求:不能存在两个相邻的1,且位于不同的层(这里的相邻指两格子共用一条线)。

        请你帮du熊计算一下有多少种填法。

    Input

        输入包含多组测试数据,每组数据包含一个偶数n (2 <= n <= 500)。

    Output

        请计算并输出对2012取余后的结果。

    Sample Input

    2

    4

    Sample Output

    16

    1952

    Hint

    当n = 4时

    1011

    0100

    0100

    0000

    是满足要求的

    1111

    0100

    0100

    0000

    是不满足要求的,因为第一行第二列的1和第二行第二列的1相邻且位于不同的层。

    后来想到的解法,,对n层,,则四个角上的不用考虑,,则将剩余的部分在中间用十字平均分成四部分

    如上图中6层的数组,,划分成的左上角为,,则只需要一个一个分别看,,又分为。。,,,

    则可以分别看成3个元素的数组,,填充0和1,但1不能相邻,,

    5个元素的数组,,填充0和1,但1不能相邻,,

    同理,,n个元素的数组,,填充0和1,但1不能相邻,,各类共的有,,3*2^[(n-1)/2]-1种。。以此类推,,,即可完成,,晚了,,程序找时间补上。。

    想想还是补上吧。。省得忘记补充。。

    1. #include <iostream>  
    2. using namespace std;  
    3. int main()  
    4. {  
    5.     int n;  
    6.     cin>>n;  
    7.     int x=16;  
    8.         for (int i = n-1;i>2;i-=2)  
    9.         {  
    10.             int num = 2;  
    11.             for (int j = 1;j<(i-1)/2;j++)  
    12.             {  
    13.                 num *= 2;  
    14.             }  
    15.             x = x*(3*num -1)*(3*num -1)*(3*num -1)*(3*num -1);  
    16.         }  
    17.     cout<<x%2012;  
    18.     return 0;  
    19. }  
  • 相关阅读:
    Oracle 推出 ODAC for Entity Framework 和 LINQ to Entities Beta版
    Entity Framework Feature CTP 5系列文章
    MonoDroid相关资源
    MSDN杂志上的Windows Phone相关文章
    微软学Android Market推出 Web Windows Phone Marketplace
    使用 Visual Studio Agent 2010 进行负载压力测试的安装指南
    MonoMac 1.0正式发布
    Shawn Wildermuth的《Architecting WP7 》系列文章
    使用.NET Mobile API即51Degrees.mobi检测UserAgent
    MongoDB 客户端 MongoVue
  • 原文地址:https://www.cnblogs.com/lfyy/p/2817032.html
Copyright © 2011-2022 走看看