题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6185

题意:用 1 * 2 的小长方形完全覆盖 4 * n的矩形有多少方案。

解法:小范围是一个经典题,之前写过,见这里:http://blog.csdn.net/just_sort/article/details/73650284

然后推出前几项发现是有规律的,要问如何发现规律,不妨丢到std跑一跑。。。

#include<bits/stdc++.h>
using namespace std;
#define ld double
const int SZ=1e5;
int n;
typedef vector<ld> vld;
vld ps[2333];
int pn=0,fail[SZ];
ld x[SZ],delta[SZ];
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%lf",x+i);
for(int i=1;i<=n;i++)
{
ld dt=-x[i];
for(int j=0;j<ps[pn].size();j++)
dt+=x[i-j-1]*ps[pn][j];
delta[i]=dt;
if(fabs(dt)<=1e-7) continue;
fail[pn]=i; if(!pn) {ps[++pn].resize(1); continue;}
vld&ls=ps[pn-1]; ld k=-dt/delta[fail[pn-1]];
vld cur; cur.resize(i-fail[pn-1]-1); //trailing 0
cur.push_back(-k); for(int j=0;j<ls.size();j++) cur.push_back(ls[j]*k);
if(cur.size()<ps[pn].size()) cur.resize(ps[pn].size());
for(int j=0;j<ps[pn].size();j++) cur[j]+=ps[pn][j];
ps[++pn]=cur;
}
for(unsigned g=0;g<ps[pn].size();g++)
printf("%f ",ps[pn][g]);
return 0;
}

发现规律是dp[i] = dp[i-1] + 5*dp[i-2] + dp[i-3] - dp[i-4]。然后就是简单的矩阵快速幂。

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const LL mod = 1e9+7;
struct Matrix{
LL a[4][4];
void set1(){
memset(a,0,sizeof(a));
}
void set2(){
memset(a, 0, sizeof(a));
for(int i=0; i<4; i++){
a[i][i]=1;
}
}
};
Matrix operator * (const Matrix &a, const Matrix &b){
Matrix res;
res.set1();
for(int i=0; i<4; i++){
for(int j=0; j<4; j++){
for(int k=0; k<4; k++){
res.a[i][j] = (res.a[i][j]+a.a[i][k]*b.a[k][j]+mod)%mod;
}
}
}
return res;
}
Matrix qsm(Matrix a, LL n){
Matrix res;
res.set2();
while(n){
if(n&1) res=res*a;
a = a*a;
n>>=1;
}
return res;
}
LL n;
int main()
{
while(~scanf("%lld", &n))
{
if(n==1) puts("1");
else if(n==2) puts("5");
else if(n==3) puts("11");
else if(n==4) puts("36");
else{
Matrix a,b;
a.a[0][0] = 1, a.a[0][1] = 5, a.a[0][2] = 1, a.a[0][3] = -1;
a.a[1][0] = 1, a.a[1][1] = 0, a.a[1][2] = 0, a.a[1][3] = 0;
a.a[2][0] = 0, a.a[2][1] = 1, a.a[2][2] = 0, a.a[2][3] = 0;
a.a[3][0] = 0, a.a[3][1] = 0, a.a[3][2] = 1, a.a[3][3] = 0;
b.set1();
b.a[0][0] = 36;
b.a[1][0] = 11;
b.a[2][0] = 5;
b.a[3][0] = 1;
a = qsm(a, n-4);
a = a*b;
printf("%lld\n", a.a[0][0]%mod);
}
}
return 0;
}

HDU 6185 Covering 矩阵快速幂的更多相关文章

  1. HDU.2640 Queuing (矩阵快速幂)

    HDU.2640 Queuing (矩阵快速幂) 题意分析 不妨令f为1,m为0,那么题目的意思为,求长度为n的01序列,求其中不含111或者101这样串的个数对M取模的值. 用F(n)表示串长为n的 ...

  2. HDU 5667 构造矩阵快速幂

    HDU 5667 构造矩阵快速幂 题目描述 解析 我们根据递推公式 设 则可得到Q的指数关系式 求Q构造矩阵 同时有公式 其中φ为欧拉函数,且当p为质数时有 代码 #include <cstdi ...

  3. HDU 2157(矩阵快速幂)题解

    How many ways?? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  4. HDU 6395 分段矩阵快速幂 HDU 6386 建虚点+dij

    http://acm.hdu.edu.cn/showproblem.php?pid=6395 Sequence Time Limit: 4000/2000 MS (Java/Others)    Me ...

  5. HDU 6470 【矩阵快速幂】

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6470 写这道题是为了让自己不要忘记矩阵快速幂如何推出矩阵式子的. 注意 代码是TLE的!! #incl ...

  6. HDU 5607 graph 矩阵快速幂 + 快速幂

    这道题得到了学长的助攻,其实就是一个马尔科夫链,算出一步转移矩阵进行矩阵快速幂就行了,无奈手残 这是我第一回写矩阵快速幂,写的各种毛病,等到调完了已经8点44了,交了一发,返回PE,(发现是少了换行) ...

  7. HDU 1575(裸矩阵快速幂)

    emmmmm..就是矩阵快速幂,直接附代码: #include <cstdio> using namespace std; ; ; struct Matrix { int m[maxn][ ...

  8. hdu 6395Sequence【矩阵快速幂】【分块】

    Sequence Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Total ...

  9. Reading comprehension HDU - 4990 (矩阵快速幂 or 快速幂+等比数列)

    ;i<=n;i++) { )ans=(ans*+)%m; %m; } 给定n,m.让你用O(log(n))以下时间算出ans. 打表,推出 ans[i] = 2^(i-1) + f[i-2] 故 ...

随机推荐

  1. Object-C 里面的animation动画效果,核心动画

    #import "CoreAnimationViewController.h" @interface CoreAnimationViewController ()@property ...

  2. Linux安装搜狗输入法教程

    最近开始学习linux 在安装输入法中遇到的一些问题,最终成功安装,也得益于网络上的前辈写的文章,现在将全部安装步骤以及遇到的一些问题总结如下:   基本上分三步走 1,添加fcitx的键盘输入法系统 ...

  3. JS和jQuery中ul li遍历获取对应的下角标

    首先先看代码: html代码部分: <div id="div"> <ul> <li>1111111</li> <li>2 ...

  4. iOS字典转模型MJExtension使用

    如果项目是纯OC的建议使用,MJExtension是一套字典和模型之间互相转换的超轻量级框架,可以轻松完成: 字典(JSON) --> 模型(Model) 模型(Model) --> 字典 ...

  5. TypeScript02 方法特性【参数种类、参数个数】、generate方法、析构表达式、箭头表达式、循环

    1 方法的参数 1.1 必选参数 调用方法时实参的个数必须和定义方法时形参在数量和类型上匹配 /** * Created by Administrator on 2017/8/2 0002. */ f ...

  6. oracle 通过同义词建立视图

    需要给予以下权限. GRANT CREATE VIEW TO tms;GRANT SELECT ANY table TO tms;GRANT SELECT ANY DICTIONARY TO tms;

  7. Android中的Activity

    Android四大组件 活动(Activity) 广播接收者(BroadCastReceiver) 服务(Service) 内容提供者(Contentprovider) Activity 先来看And ...

  8. poj 3253 Fence Repair 优先队列

    poj 3253 Fence Repair 优先队列 Description Farmer John wants to repair a small length of the fence aroun ...

  9. F数圈圈

    Description 幼儿园的小朋友对数字其实不是很感兴趣,他们更感兴趣的是形状,现在给你一个数字,小朋友都会数出其中一共有多少圆圈圈 Input 一个数字n长度不超过19位 Output 输出其中 ...

  10. Dom的增删查改以及常用事件

    dom的增删查改 // 查 var _input = document.getElementById('_input'); var _div = document.getElementsByClass ...