hdu 6185 递推+矩阵快速幂
思路:考虑全部铺满时,前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 递推+矩阵快速幂的更多相关文章
- hdu 2604 递推 矩阵快速幂
HDU 2604 Queuing (递推+矩阵快速幂) 这位作者讲的不错,可以看看他的 #include <cstdio> #include <iostream> #inclu ...
- HDU 2842 (递推+矩阵快速幂)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2842 题目大意:棒子上套环.第i个环能拿下的条件是:第i-1个环在棒子上,前i-2个环不在棒子上.每个 ...
- 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] 类似于斐波那契数列的递推式子吧, 但 ...
- HDU Queuing(递推+矩阵快速幂)
Queuing Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- HDU 5950 Recursive sequence 【递推+矩阵快速幂】 (2016ACM/ICPC亚洲区沈阳站)
Recursive sequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Other ...
- HDU - 6185 Covering(暴搜+递推+矩阵快速幂)
Covering Bob's school has a big playground, boys and girls always play games here after school. To p ...
- [hdu 2604] Queuing 递推 矩阵快速幂
Problem Description Queues and Priority Queues are data structures which are known to most computer ...
- HDU6030 Happy Necklace(递推+矩阵快速幂)
传送门:点我 Little Q wants to buy a necklace for his girlfriend. Necklaces are single strings composed of ...
- 五校联考R1 Day1T3 平面图planar(递推 矩阵快速幂)
题目链接 我们可以把棱柱拆成有\(n\)条高的矩形,尝试递推. 在计算的过程中,第\(i\)列(\(i\neq n\))只与\(i-1\)列有关,称\(i-1\)列的上面/下面为左上/左下,第\(i\ ...
随机推荐
- [Java/File]读取日文CSV文件不乱码
try { StringBuilder sb=new StringBuilder(); sb.append("\nContent in File:'"+filePathname+& ...
- tomcat的AJP(定向包协议)协议
由于tomcat的html和图片解析功能相对其他服务器如apche等较弱,所以,一般都是集成起来使用,只有jsp和servlet服务交由tomcat处理,而tomcat和其他服务器的集成,就是通过aj ...
- PHP 自动加载类
类的自动加载 (Autoloading Classes) 在编写面向对象(OOP) 程序时,很多开发者为每个类新建一个 PHP 文件. 这会带来一个烦恼:每个脚本的开头,都需要包含(include)一 ...
- MySQL 权限管理 用户管理
我使用的是 MariaDB 数据库 查看 MySQL 所有用户: select distinct concat('User: \'',user, '\'@\'', host, '\'') as que ...
- Dart抽象类和多态
/* Dart中抽象类: Dart抽象类主要用于定义标准,子类可以继承抽象类,也可以实现抽象类接口. 1.抽象类通过abstract 关键字来定义 2.Dart中的抽象方法不能用abstract声明, ...
- Spring mvc4 + ActiveMQ 整合【什么框架与什么框架的整合搜索】
一.配置部分 二.代码部分 三.页面部分 四.Controller控制器 五.效果展示 六.加入监听器 七.最最重要的,别忘了打赏 一.配置部分 ActiveMQ的安装这就不说了,很简单, 这个例子采 ...
- Eclipse安装中文简体语言包
原文地址:https://blog.csdn.net/qq_41101213/article/details/84405452 方法一:1. 下载中文语言包: 1.1 打开网址:http://www. ...
- source insight 4.0常见问题及相关配置
摘自:https://blog.csdn.net/liitdar/article/details/79891795 本文介绍source insight 4.0常见的问题以及相关的配置. 1. ...
- matlab基本函数min
一起来学演化计算-matlab基本函数min 觉得有用的话,欢迎一起讨论相互学习~Follow Me 找到数组中最小的元素 语法 M = min(A) 返回A的最小元素 如果A是一个向量,那么min( ...
- Python手册 3.7
Python手册 3.7 下载地址:https://pan.baidu.com/s/1dPzwwP3ehnyLUNWTsB2QJg 关注微信公众号获取提取码: 输入:py99 获取提取码