思路:考虑全部铺满时,前2列的放法。有如下5种情况:(转自http://blog.csdn.net/elbadaernu/article/details/77825979 写的很详细 膜一下) 
 
假设f(n)表示列数为n时的方案数,那么这五种情况合法的方案数相加即f(n)。这里n大于2. 
第一种的方案数即f(n-1),第二种的方案数即f(n-2)。 
第三种:接下来有两种方案可以选择,一是用一块毛毯去填补第二列的空缺部分,那么此时接下来填补的方案数为f(n-2),二是用两块毛毯去填补,这样的话第三列又会形成一个新的空缺,如下图所示: 
 
所以我们又可以像之前那样去填补,所以第三种的方案数为f(n-2)+f(n-3)+f(n-4)+……+f(0),f(0)=1 
第四种:情况与第三种类似,方案数与其相同。 
第五种:开始的选择也是两种,一是选择一块毯子去填,这样接下来填补的方案数为f(n-2),或者选择两块去填,然后,为了使它铺满,我们还得用两块毛毯去铺上下两个空缺的地方,这时的空缺形成了之前的情况,如下图所示: 
 
以此类推,所以第五种的方案数为f(n-2)+f(n-4)+f(n-6)+……+f(1)或者f(0)(偶数0,奇数1)

所以总的方案数 
f(n)=f(n-1)+f(n-2)+2*(f(n-2)+f(n-3)+……+f(0))+f(n-2)+f(n-4)+f(n-6)+……+f(1)或者f(0) 
然后将n=n-2代入上式,然后用f(n)减去f(n-2), 
化简得f(n)=f(n-1)+5*f(n-2)+f(n-3)-f(n-4)。

然后自己的矩阵快速幂也换了一个较为通用的写法:

#include <cstdio>
#include <iostream>
#include <cstring>
#include <queue>
#include <algorithm>
using namespace std;
typedef long long ll;
const ll mod=;
struct Martix
{
ll mp[][];
ll r,c;
};
Martix mul(Martix a,Martix b)
{
Martix c;
c.r=a.r;
c.c=b.c;
for(int i=;i<a.r;i++)
{
for(int j=;j<b.c;j++)
{
c.mp[i][j]=;
for(int k=;k<a.c;k++)
{
c.mp[i][j]=(a.mp[i][k]*b.mp[k][j]+c.mp[i][j]+mod)%mod;
c.mp[i][j]%=mod;
}
}
}
return c;
}
Martix ans;
Martix a;// 系数矩阵
void init()
{
memset(ans.mp,,sizeof(ans.mp));
ans.r=;
ans.c=;
ans.mp[][]=;
ans.mp[][]=;
ans.mp[][]=;
ans.mp[][]=; a.r=a.c=;
memset(a.mp,,sizeof(a.mp));
a.mp[][]=;
a.mp[][]=;
a.mp[][]=;
a.mp[][]=-;
a.mp[][]=a.mp[][]=a.mp[][]=;
}
Martix pow(Martix x,ll k)
{
Martix temp;
temp.r=temp.c=x.r;
memset(temp.mp,,sizeof(temp.mp));
for(int i=;i<x.r;i++) // 单位矩阵
{
for(int j=;j<x.c;j++) if(i==j) temp.mp[i][j]=;
}
while(k)
{
if(k&) temp=mul(x,temp);
k/=;
x=mul(x,x);
}
return temp;
}
int main()
{
ll n; while(cin>>n)
{
init();
if(n==)
{
cout<<<<endl;
continue;
}
if(n==)
{
cout<<<<endl;
continue;
}
if(n==)
{
cout<<<<endl;
continue;
}
if(n==)
{
cout<<<<endl;
continue;
}
if(n==)
{
cout<<<<endl;
continue;
}
a=pow(a,n-);//
ans=mul(a,ans);
cout<<ans.mp[][]%mod<<endl;
}
return ;
}

hdu 6185 递推+矩阵快速幂的更多相关文章

  1. hdu 2604 递推 矩阵快速幂

    HDU 2604 Queuing (递推+矩阵快速幂) 这位作者讲的不错,可以看看他的 #include <cstdio> #include <iostream> #inclu ...

  2. HDU 2842 (递推+矩阵快速幂)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2842 题目大意:棒子上套环.第i个环能拿下的条件是:第i-1个环在棒子上,前i-2个环不在棒子上.每个 ...

  3. Recursive sequence HDU - 5950 (递推 矩阵快速幂优化)

    题目链接 F[1] = a, F[2] = b, F[i] = 2 * F[i-2] + F[i-1] + i ^ 4, (i >= 3) 现在要求F[N] 类似于斐波那契数列的递推式子吧, 但 ...

  4. HDU Queuing(递推+矩阵快速幂)

    Queuing Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  5. HDU 5950 Recursive sequence 【递推+矩阵快速幂】 (2016ACM/ICPC亚洲区沈阳站)

    Recursive sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Other ...

  6. HDU - 6185 Covering(暴搜+递推+矩阵快速幂)

    Covering Bob's school has a big playground, boys and girls always play games here after school. To p ...

  7. [hdu 2604] Queuing 递推 矩阵快速幂

    Problem Description Queues and Priority Queues are data structures which are known to most computer ...

  8. HDU6030 Happy Necklace(递推+矩阵快速幂)

    传送门:点我 Little Q wants to buy a necklace for his girlfriend. Necklaces are single strings composed of ...

  9. 五校联考R1 Day1T3 平面图planar(递推 矩阵快速幂)

    题目链接 我们可以把棱柱拆成有\(n\)条高的矩形,尝试递推. 在计算的过程中,第\(i\)列(\(i\neq n\))只与\(i-1\)列有关,称\(i-1\)列的上面/下面为左上/左下,第\(i\ ...

随机推荐

  1. python-pptx

    python-pptx的使用首先需要了解几个基本概念: 1.引入python-pptx frompptximportpresentation    # 实例化Presentation    prs= ...

  2. jvm 命令使用调优 通过jstat、jmap对java程序进行性能调优

    转载:http://blog.csdn.net/jerry024/article/details/8507589 转载: https://blog.csdn.net/zhaozheng7758/art ...

  3. 海思uboot启动流程详细分析(转)

    海思uboot启动流程详细分析(一) 海思uboot启动流程详细分析(二) 海思uboot启动流程详细分析(三)  

  4. [转]linux 下 使用 c / c++ 调用curl库 做通信开发

    example:   1. http://curl.haxx.se/libcurl/c/example.html  2. http://www.libcurl.org/book:  1. http:/ ...

  5. flutter Dismissible 可以在拖动时隐藏的widget

    import 'package:flutter/material.dart'; class DismissedAppPage extends StatefulWidget { @override St ...

  6. kubernetes 亲和性调度详解

    文章目录 1 概述: 2 场景一:调度到一组具有相同特性的主机上(label+nodeSelector) 3 场景二:部署的应用不想调度到某些节点上(nodeaffinity) 4 场景三:部署的应用 ...

  7. Oracle数据库查看表空间sql语句

    转: Oracle数据库查看表空间sql语句 2018-09-03 15:49:51 兰海泽 阅读数 6212   版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出 ...

  8. error C1002: 在第 2 遍中编译器的堆空间不足

    error C1002: 在第 2 遍中编译器的堆空间不足 fatal error C1083: Not enough space 打开VS2015 x64 x86 兼容工具命令提示符,在此命令行中再 ...

  9. pyenv、virtualenv、virtualenvwrapper三种python多版本介绍

    今天有把此前接触过的三种python实现多版本环境用到的软件pyenv.virtualenv.virtualenvwrapper,了解了一番,现做如下总结: 一.pyenv: 是针对python多版本 ...

  10. F5 BIG-IP – Useful SNMP oids to monitor

    I have collected some of the most interesting OIDs (in my scenario im using LTM and APM modules) fro ...