This way

题意:

你现在有无穷个0,1,2,现在让你构造一个长度为n的串,使得满足以下条件
对于第i位(2<=i<n),a[i]*a[i]>=a[i-1]*a[i+1]
问你能构造多少种这个串

题解:

很明显它首先是dp,于是我写出这样一个式子:
dp[i][j]表示第i位取j时的情况数
但是这个式子是要从dp[i-1][k]dp[i-2][l]这里转移过来的,同时n的范围是1e18,所以这个很明显是矩阵快速幂,但是这种方法不行。
于是想到dp[i][j][k]表示在第i位取j,第i+1位取k的时候的状态数。这样转移就变成了一维的。
那么转移矩阵就是枚举ijk三个位置,j和i表示后面两位,k和j表示前面两位。在i*k<=j*j成立的时候,b.m[i∗3+j][j∗3+k]++;b.m[i*3+j][j*3+k]++;b.m[i∗3+j][j∗3+k]++;
因为每个值都有3种,所以i
3+j表示dp[i+1]的状态,j*3+k表示dp[i]的状态。
好久没做矩阵快速幂了啊,对于
转移矩阵*初始值
的时候,初始值的矩阵是m*1的,也就是:

 for(int i=0;i<9;i++)a.m[i][0]=1;n-=2;while(n){if(n&1)a=b*a;b=b*b;n>>=1;}

但是对于
初始值*转移矩阵
的时候,初始矩阵是m*m的,也就是

 for(int i=0;i<9;i++)a.m[i][i]=1;n-=2;while(n){if(n&1)a=a*b;b=b*b;n>>=1;}

呕,我要吐了

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod=1e9+7;
int maxn=9;
struct Matrix
{ll m[9][9];Matrix(){memset(m,0,sizeof(m));}Matrix  operator +(const Matrix &b)const{Matrix c;for(int i=0; i<maxn; i++){for(int j=0; j<maxn; j++){c.m[i][j]=(m[i][j]+b.m[i][j])%mod;}}return c;}Matrix  operator *(const Matrix &b)const{Matrix c;memset(c.m,0,sizeof(c.m));for(int i=0; i<maxn; i++){for(int j=0; j<maxn; j++){for(int k=0; k<maxn; k++){c.m[i][j]=(c.m[i][j]+(m[i][k]*b.m[k][j])%mod)%mod;}}}return c;}
};int main()
{ll n;scanf("%lld",&n);Matrix a,b;for(int i=0;i<=2;i++)for(int j=0;j<=2;j++)for(int k=0;k<=2;k++)if(i*k<=j*j)b.m[i*3+j][j*3+k]++;//memset(a.m,0,sizeof(a.m));for(int i=0;i<9;i++)a.m[i][0]=1;n-=2;while(n){if(n&1)a=b*a;b=b*b;n>>=1;}ll ans=0;for(int i=0;i<9;i++)ans=(ans+a.m[i][0])%mod;printf("%lld\n",ans);return 0;
}
/**/

H - Log Concave Sequences —— 矩阵快速幂相关推荐

  1. Log Concave Sequences(矩阵快速幂求递推)

    Log Concave Sequences Gym - 102302H A sequence of numbers A is said to be logarithm concave if, and ...

  2. (矩阵快速幂)CF102302H. Log Concave Sequences

    CF102302H. Log Concave Sequences 题意&思路: 有n位数,每位只包含0,1,2,要求对于每个位置,ai2>=ai-1*ai+1.求这样的数有多少. 对于答 ...

  3. Log Concave Sequences 【Gym - 102302H】【矩阵快速幂】

    Log Concave Sequences Gym - 102302H 题目中说到,对于每个,有,于是乎,我们可以看成是多个三元组的合并了. 那么,又该如何去计算答案呢?我们不妨看成多个基础三元组的方 ...

  4. gym 102302 2019 USP-ICMC H-Log Concave Sequences (dp + 矩阵快速幂优化)

    题目: 传送门 思路:       我们可以先写出转移方程,发现该方程是一个不变的递推式,我们考虑用矩阵快速幂来优化这个递推式. 完结撒花- AC_Code #include <iostream ...

  5. H - Fibonacci POJ - 3070 (矩阵快速幂)

    H - Fibonacci POJ - 3070 (矩阵快速幂) Description In the Fibonacci integer sequence, F0 = 0, F1 = 1, and ...

  6. 矩阵快速幂2Jzzhu and Sequences Recurrences Contemplation! Algebra Reading comprehension

    来!接着写题解,立个flag:矩阵快速幂题解不写完今晚不睡觉! 此题解是接着矩阵快速幂1写的,此篇有哪里写不清楚的地方导致看不懂的可以先看1:https://blog.csdn.net/qq_4536 ...

  7. #1560 : H国的身份证号码II(dp+矩阵快速幂)

    #1560 : H国的身份证号码II 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 H国的身份证号码是一个N位的正整数(首位不能是0).此外,由于防伪需要,一个N位正整 ...

  8. 数论-快速幂、矩阵快速幂、慢速乘

    文章目录 快速幂 矩阵快速幂 慢速乘 例题 HDU-2817 HDU-3117 XUJC-1395 快速幂 首先幂运算 a n a^n an就是 n n n个 a a a相乘,我们可以直接调用库函数 ...

  9. 【做题】SRM701 Div1 Hard - FibonacciStringSum——数学和式&矩阵快速幂

    原文链接 https://www.cnblogs.com/cly-none/p/SRM701Div1C.html 题意:定义"Fibonacci string"为没有连续1的01串 ...

最新文章

  1. python2.7 + selenium3.4.3浏览器的选择
  2. Deep Learning论文笔记之(七)深度网络高层特征可视化
  3. oracle无法解析连接符,oracle无法解析连接字符串,请教
  4. 新手实用的电脑维护小常识
  5. 感叹号挖孔屏稳了!iPhone 14 Pro高清概念图曝光:屏占比创5年最高
  6. C语言把浮点数转换为字符串
  7. ★LeetCode(669)——修剪二叉搜索树(JavaScript)
  8. Maven学习(四)Maven 命令行选项
  9. VSS2005的安装与配置
  10. Internet Explorer 包含五个预定义区域
  11. linux时钟(时间)同步
  12. java实现生日提醒_生日提醒功能-SQL查询语句在Java中肿么运用?
  13. 挑战SQL经典题(一)
  14. NAFSM中值滤波器讲解与实现
  15. Flashed Ball
  16. 小偷电竞酒店换显卡被抓!网吧/电竞酒店如何防盗?
  17. 2018富途证券前端实习面试总结
  18. Elasticsearch之中文分词器插件es-ik的自定义热更新词库
  19. 经典算法题-球和篮子
  20. 畅想未来计算机和人工智能的应用,人工智能在生活中的应用及展望

热门文章

  1. 网络技能大赛云平台部分-JCOS创建用户
  2. 2021年度鼓励发展商业品牌首店项目申报条件及奖励,补贴500万
  3. Android 组件化架构概要,ffmpeg音视频开发实战陈超
  4. C语言中‘/n’和‘\n’(写项目时发现)
  5. 你可以这样优化 if-else 代码结构
  6. matlab音频信号的采样与重构,信号的采样与重构
  7. Cluster介绍(集群)DRS介绍(分布式资源调度)EVC技术介绍
  8. 北斗授时与GPS授时的异同点
  9. 阿里云的内容识别技术可以实现哪些场景下的智能化应用?
  10. mysql 查询条件是中文时,无法查询的解决办法