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\ ...
随机推荐
- win10: ctrl+shift不能切换输入法的问题
习惯了使用Ctrl+Shift切换输入法,乍然切换到Win10,很不适应,可用以下方法修改之. 1. 点击开始菜单,点击“设置”按钮 2. 选择“时间与语言” 3. 选择“区域和语言”按钮,查看右 ...
- Alternatives to Activiti for all platforms with any license
Activiti Activiti is a light-weight workflow and Business Process Management (BPM) Platform targeted ...
- 阿里云 商标 SAAS
商标注册-注册商标查询-商标交易平台-阿里云商标https://tm.aliyun.com/#/ 阿里云商标查询入口-云栖社区-阿里云https://yq.aliyun.com/articles/69 ...
- [转]Windows系统下批量重命名文件(bat命令版本)
原文地址:https://jingyan.baidu.com/article/6dad507524bdcba122e36e44.html 我们有时候会遇到大量文件需要重命名,Windows系统下右键菜 ...
- jenkins用户和权限管理
添加用户 进入管理界面,选择manage users,添加用户 将人和角色绑定 用户和项目绑定 角色管理 可以针对不同的站点对不同的人赋权 添加角色并赋权 将角色赋权给对应的用户 使用新添加的这个用户 ...
- 011-JSON、JSONObject、JSONArray使用、JSON数组形式字符串转换为List<Map<String,String>>的8种方法
一.JSON数据格式 1.1.常用JSON数据格式 1.对象方式:JSONObject的数据是用 { } 来表示的, 例如: { "id" : "123", & ...
- 线性回归:鸢尾花数据iris
# encoding: utf-8 from sklearn.linear_model import LogisticRegression import numpy as np from sklear ...
- Swift4.0复习函数
1.函数的定义与调用: 一个函数定义的基本语法如以下代码所示: func function_name (param1: Int, param2: Float, param3: Double) -> ...
- idea中maven项目下载源码的方式的
当我们打开class文件的时候,右上角有个Download Sources的超链接,点击就可以下载源码了. 下载源码后,就变成java文件了.
- LODOP中带caption的表格被关联并次页偏移测试
ADD_PRINT_TABLE中的thead和tfoot可以每页输出,后面的打印项关联表格,可以紧跟着表格,实现在表格后面紧跟着输出内容的效果,表格可以自动分页,并总是跟在表格后面 ,在表格最后输出. ...