分析:

后面的环能不能取下来与前面的环有关,前面的环不被后面的环所影响。所以先取最后面的环

设状态F(n)表示n个环全部取下来的最少步数

先取第n个环,就得使1~n-2个环属于被取下来的状态,第n-1个环属于未被取下来的状态。那么F(n) = F(n-2) + 1 + ... (这里的1表示取下第n个需要一步)

即F(n)可以为F(n-2) + 1与某些数的和。取下n后,1~n-2为取下的状态,n-1为未被取下的状态。如果我们想取下n-1,那么n-2要为未被取下来的状态且1~n-3为被取下的状态。

但是这里不能直接将n-2变成为未取下的状态,你想把n-2的状态改变,就得使n-3为未被取下来的状态且1~n-4为被取下的状态;你想把n-3的状态改变,就得使n-4为未被取下来的状态且1~n-5为被取下的状态.

这个一直递推下去你要使1~n-2全部属于未被取下的状态才能继续取n-1。

将1~n全部取下来有下列四步

第一步:取1~n-2,需要F(n-2)步

第二步:取第n个,需要1步

第三步:恢复1~n-2,需要F(n-2)步 (取下来的最少步数和恢复的最少步数是一样的,它们是对称的)

第四步:将1~n-1个全部取下来

所以:F(n) = F(n-1) + 2*F(n-2) + 1

矩阵快速幂套模板啦!

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;typedef long long ll;
const int Mod = 200907;
const int N = 5;
int msize;struct Mat
{int mat[N][N];
};Mat operator *(Mat a, Mat b)
{Mat c;memset(c.mat, 0, sizeof(c.mat));for(int k = 0; k < msize; ++k)for(int i = 0; i < msize; ++i)if(a.mat[i][k])for(int j = 0; j < msize; ++j)if(b.mat[k][j])c.mat[i][j] = ((ll)a.mat[i][k] * b.mat[k][j] + c.mat[i][j])%Mod;return c;
}Mat operator ^(Mat a, int k)
{Mat c;memset(c.mat,0,sizeof(c.mat));for(int i = 0; i < msize; ++i)c.mat[i][i]=1;for(; k; k >>= 1){if(k&1) c = c*a;a = a*a;}return c;
}int main()
{int n;msize = 3;Mat A;A.mat[0][0] = 1, A.mat[0][1] = 2, A.mat[0][2] = 1;A.mat[1][0] = 1, A.mat[1][1] = 0, A.mat[1][2] = 0;A.mat[2][0] = 0, A.mat[2][1] = 0, A.mat[2][2] = 1;while(~scanf("%d",&n) && n){if(n==1){puts("1");continue;}Mat ans = A^(n-2);printf("%d\n", (ans.mat[0][0]*2 + ans.mat[0][1] + ans.mat[0][2])%Mod);}return 0;
}

转载于:https://www.cnblogs.com/pach/p/7256925.html

hdu 2842 Chinese Rings 矩阵快速幂相关推荐

  1. HDU 2842 Chinese Rings(矩阵高速功率+递归)

    职务地址:HDU 2842 这个游戏是一个九连环的游戏. 如果当前要卸下前n个环.由于要满足前n-2个都卸下,所以要先把前n-2个卸下.须要f(n-2)次.然后把第n个卸下须要1次,然后这时候要卸下第 ...

  2. Chinese Rings 矩阵快速幂

    题意:把n个环拆下来的最小步骤 操作:第一个环可一步取走或戴上,要取走或戴上第n个环,前n-2个环必须取走,且第n-1个环还在: 思路:设取走前n个环要f[n]步,此时前n-2个环已取走,因此f[n] ...

  3. HDU - 4990 Reading comprehension(矩阵快速幂,水题)

    题目链接:点击查看 题目大意:给出一段程序,进行优化后提交 题目分析:其实就是找规律,大水题一个,偶尔也是需要做做水题找找自信(逃) 先将题目中的程序拿下来,跑上100项,然后拿到oeis里找一下规律 ...

  4. HDU - 5015 233 Matrix(矩阵快速幂)

    题目链接:点击查看 题目大意:初始化:第一行依次为233,2333,23333....第一列依次为a0,a1,a2....(题目中会给出),再给出递推公式:,求矩阵中第n行m列的数字是多少 题目分析: ...

  5. 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] 类似于斐波那契数列的递推式子吧, 但 ...

  6. HDU 2256Problem of Precision(矩阵快速幂)

    题意 求$(\sqrt{2} + \sqrt{3})^{2n} \pmod {1024}$ $n \leqslant 10^9$ Sol 看到题解的第一感受:这玩意儿也能矩阵快速幂??? 是的,它能q ...

  7. HDU (1575)Tr A ---矩阵快速幂

    Tr A Problem Description A为一个方阵,则Tr A表示A的迹(就是主对角线上各项的和),现要求Tr(A^k)%9973. Input 数据的第一行是一个T,表示有T组数据. 每 ...

  8. 考研路茫茫――单词情结 HDU - 2243(ac自动机 + 矩阵快速幂)

    考研路茫茫--单词情结 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tota ...

  9. HDU 6185 Covering 矩阵快速幂 递推

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=6185 题目描述: 一个4*n的矩形, 你用1*2的矩形覆盖有多少种方案, n <= 1e18 ...

最新文章

  1. Vue+mui实现图片的本地缓存
  2. 如何将 Oracle 单实例数据库转换为RAC数据库?
  3. IOS Animation-KeyPath值
  4. 贪心算法三个经典例题
  5. 解决checkra1n越狱失败及越狱后AFC2失效问题
  6. ffmpeg将视频转换成图片
  7. XTTS V4.3 跨平台迁移12.1.2 HPUX ->Oracle Linux
  8. 使用MATLAB进行多元非线性回归拟合预测
  9. 大数据算法工程师知识点大全
  10. 〖金融帝国实验室〗(Capitalism Lab)深度研究文章——《浅析CapLab中的通货膨胀与城市GDP》(上)(作者:jiuliumuliao) ​​​​
  11. origin matlab 数据,数据拟合确定参数,可以用matlab、origin等软件,求结果。
  12. 实现人rou搜索的10个经典方法
  13. PostgreSQL 11 preview - Surjective indexes - 索引HOT增强(表达式)update评估
  14. 《scikit-learn机器学习》决策树③ -泰坦尼克号幸存者预测【思路+代码】
  15. (深度学习快速入门)第三章第一节:多层感知器简介
  16. 学生命科学要学计算机吗,生命科学属于什么门类 计算机科学与技术专业属于什么门类...
  17. Vim 8文本处理实战 第二章 高级编辑和文本浏览 阅读笔记2
  18. 深入理解 RecyclerView 的绘制流程和滑动原理,直面春招
  19. C++第五次上机--作业报告
  20. usb摄像头设备名重复的问题

热门文章

  1. 小学生 python教程-Python最佳学习路线图
  2. python 自学需要多久-怎么自学python,大概要多久?
  3. python切片语法-Python切片详解
  4. python编程案例教程答案-Python程序开发案例教程
  5. 爬虫好学吗python-小白python学到什么程度可以学习网络爬虫? ?
  6. 学python好不好-学习python的前景怎么样?
  7. mybatis中的TypeHandler设计与实现
  8. B-Tree 和 B+Tree
  9. java基于udp实现键盘录入聊天
  10. mybatis查询如何返回ListMap类型数据