链接:传送门

题意:解 N 连环最少步数 % 200907

思路:对于 N 连环来说,解 N 连环首先得先解 N-2 连环然后接着解第 N 个环,然后再将前面 N-2 个环放到棍子上,然后 N 连环问题变成了 N-1 连环问题,然后将递推关系式化成矩阵形式然后用矩阵快速幂解决就ok了

  • 递推关系式:Fn = Fn-1 + 2 * Fn-2 + 1

  1. /*************************************************************************
  2. > File Name: hdu2842.cpp
  3. > Author: WArobot
  4. > Blog: http://www.cnblogs.com/WArobot/
  5. > Created Time: 2017年05月03日 星期三 22时59分07秒
  6. ************************************************************************/
  7. #include<bits/stdc++.h>
  8. using namespace std;
  9. const int MOD = 200907;
  10. const int maxn = 3;
  11. #define ll long long
  12. #define mod(x) ((x)%MOD)
  13. struct mat{
  14. ll m[maxn][maxn];
  15. }unit;
  16. mat operator*(mat a,mat b){
  17. mat ret;
  18. ll x;
  19. for(int i=0;i<3;i++){
  20. for(int j=0;j<3;j++){
  21. x = 0;
  22. for(int k=0;k<3;k++)
  23. x += mod( (ll)(a.m[i][k]*b.m[k][j] ));
  24. ret.m[i][j] = x;
  25. }
  26. }
  27. return ret;
  28. }
  29. mat pow_mat(mat a,ll x){
  30. mat ret = unit;
  31. while(x){
  32. if(x&1) ret = ret*a;
  33. a = a*a;
  34. x >>= 1;
  35. }
  36. return ret;
  37. }
  38. void init_unit(){
  39. for(int i=0;i<3;i++) unit.m[i][i] = 1;
  40. return;
  41. }
  42. ll n;
  43. mat a,b;
  44. void init(){
  45. memset(a.m,0,sizeof(a.m));
  46. memset(b.m,0,sizeof(b.m));
  47. a.m[0][0] = 1; a.m[0][1] = 2; a.m[0][2] = 1; a.m[1][0] = 1; a.m[2][2] = 1;
  48. b.m[0][0] = 2; b.m[1][0] = 1; b.m[2][0] = 1;
  49. }
  50. int main(){
  51. init();
  52. init_unit();
  53. int ss[4] = {1,1,2,5};
  54. while(cin>>n && n){
  55. if(n<=3) printf("%d\n",ss[n]);
  56. else{
  57. mat ans = pow_mat(a,n-2);
  58. ans = ans*b;
  59. cout<< ans.m[0][0]%MOD <<endl;
  60. }
  61. }
  62. return 0;
  63. }

HDU 2842 Chinese Rings( 递推关系式 + 矩阵快速幂 )的更多相关文章

  1. HDU - 2604 Queuing(递推式+矩阵快速幂)

    Queuing Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  2. Chinese Rings (九连环+矩阵快速幂)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2842 题目: Problem Description Dumbear likes to play th ...

  3. hdu 2842 Chinese Rings 矩阵快速幂

    分析: 后面的环能不能取下来与前面的环有关,前面的环不被后面的环所影响.所以先取最后面的环 设状态F(n)表示n个环全部取下来的最少步数 先取第n个环,就得使1~n-2个环属于被取下来的状态,第n-1 ...

  4. hdu 5950 Recursive sequence 递推式 矩阵快速幂

    题目链接 题意 给定\(c_0,c_1,求c_n(c_0,c_1,n\lt 2^{31})\),递推公式为 \[c_i=c_{i-1}+2c_{i-2}+i^4\] 思路 参考 将递推式改写\[\be ...

  5. hdu 2842 Chinese Rings

    点击打开hdu2842 思路: 矩阵快速幂 分析: 1 题目的意思是给定n个环,和一些规则要把所有的环全部拆下最少需要的步数 2 题目规定如果要拆第n个环,那么第n-1个要挂着,n-2环要被拆下.那么 ...

  6. HDU 3292 【佩尔方程求解 && 矩阵快速幂】

    任意门:http://acm.hdu.edu.cn/showproblem.php?pid=3292 No more tricks, Mr Nanguo Time Limit: 3000/1000 M ...

  7. [题解][SHOI2013]超级跳马 动态规划/递推式/矩阵快速幂优化

    这道题... 让我见识了纪中的强大 这道题是来纪中第二天(7.2)做的,这么晚写题解是因为 我去学矩阵乘法啦啦啦啦啦对矩阵乘法一窍不通的童鞋戳链接啦 层层递推会TLE,正解矩阵快速幂 首先题意就是给你 ...

  8. HDU 2855 斐波那契+矩阵快速幂

    http://acm.hdu.edu.cn/showproblem.php?pid=2855 化简这个公式,多写出几组就会发现规律 d[n]=F[2*n] 后面的任务就是矩阵快速幂拍一个斐波那契模板出 ...

  9. HDU 2256 Problem of Precision 数论矩阵快速幂

    题目要求求出(√2+√3)2n的整数部分再mod 1024. (√2+√3)2n=(5+2√6)n 如果直接计算,用double存值,当n很大的时候,精度损失会变大,无法得到想要的结果. 我们发现(5 ...

随机推荐

  1. Blender软件导出的obj数据格式文件内容解读

    [cube.obj] # Blender v2.78 (sub 0) OBJ File: '' # www.blender.org mtllib cube.mtl #这里是引用了一个外部材质文件cub ...

  2. MySQL 获取无限级某级的全路径

    传递参数:文件夹ID DROP FUNCTION IF EXISTS RecursionFolderFullPath; CREATE FUNCTION RecursionFolderFullPath( ...

  3. webKit 内核浏览器 源码分析

    如需转载,请注明出处! WebSite: http://www.jjos.org/ 作者: 姜江 linuxemacs@gmail.com QQ: 457283 这是一篇自己写于一年前的工作文档,分享 ...

  4. jsp js action之间传值

    1.struts2 action如何向JSP的JS函数传值 action中定义变量 public class TestAction extends ActionSupport implements S ...

  5. 基于redis的分布式锁实现方案--redisson

    实例代码地址,请前往:https://gitee.com/GuoqingLee/distributed-seckill redis官方文档地址,请前往:http://www.redis.cn/topi ...

  6. MySQL 与 MongoDB的操作对比

    MySQL与MongoDB都是开源的常用数据库,但是MySQL是传统的关系型数据库,MongoDB则是非关系型数据库,也叫文档型数据库,是一种NoSQL的数据库.它们各有各的优点,关键是看用在什么地方 ...

  7. H3C防火墙——回环流量问题(内网终端通过外网IP访问内部服务器)

    http://www.bubuko.com/infodetail-1533703.html

  8. POJ 3737

    第一道三分题,有模板 #define eps 10e-6 double cal(){}//计算题目所需要的值 while(l+eps<r) { m1=l+(r-l)/3; m2=r-(r-l)/ ...

  9. POJ 1284

    想了很久,只想到枚举的方法,估计会超时吧. 原来有这样一条性质:p为素数,则p有phi(p-1)个原根 Orz... #include <iostream> #include <cs ...

  10. 精简Linux文件路径

    精简Linux的文件路径: ..回退的功能 .留在当前文件夹 //仅仅保留一个/ abc/..要返回. 报错 删除最后一个/ 主要思路: 用栈记录路径的起始位置,讨论/后的不同情况就可以: #incl ...