du 熊填数字

本文介绍了一种解决特定矩阵填数问题的方法,该问题要求矩阵内不能出现两个相邻且位于不同层的1。文章详细解释了如何通过分层处理和递归计算来求解,最终给出了一个优化后的C++代码实现。通过逐步分析和数学归纳,作者展示了如何仅通过计算较少的组合情况来得出总的填数方案数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

 

http://blog.youkuaiyun.com/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. }  

 

 

转载于:https://www.cnblogs.com/lfyy/archive/2012/12/13/2817032.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值