zoukankan      html  css  js  c++  java
  • Lucky Sequence[SRM403DIVI500]

    1. 将所有Lucky Number按照(4,4),(4,7),(7,4),(7,7)分类,分别计算不重复的数的个数存于矩阵中:
        ---------------
        | (4,4) | (4,7) |
        ---------------      ====>    A
        | (7,4) | (7,7) |
        ---------------
    2. 求长度为length的Lucky Sequence的个数。这里应用矩阵乘法即可达到求解的目的。
       (如:(4,4) = (4,4)*(4,4) + (4,7)*(7,4))
       length = 1: return A
       length = 2: return A * A
       ......
       length = n: return A*A*...*A (即A^n)
       
       若length为偶数:
             A*A*A*...*A   => (A*A)*(A*A)*...*(A*A)
                                  => (A^2)*(A^2)*...*(A^2)
                                  => (A^4)*(A^4)*...*(A^4)
                                  => ......
                                  => (A^(n/2)) * (A^(n/2))
                                  => A^n
       若length为奇数:
             A*A*A*...*A  => A*(A*A*A*...*A) => ...
                                 => A*(A^((n-1)/2) * A^((n-1)/2))
       由此可得:

     1private long[,] pow(long[,] a, int k){
     2    if(k == 0{
     3        //单位矩阵
     4        long[,] res = new long[2,2];
     5        res[0,0= 1;
     6        res[1,1= 1;
     7        return res;
     8    }

     9    if(k % 2 == 0{
    10        return pow(mul(a,a), k/2);
    11    }
     else {
    12        return mul(a, pow(a, k-1));
    13    }

    14}

    15// long[,] mul(long[,], long[,]);// 矩阵乘法
        最后将矩阵各个元素累加即是最后结果

    用矩阵乘法来求解,code能写的非常漂亮。可惜,“我只猜中了故事开头,却没猜到故事的结局”。
  • 相关阅读:
    对javascript匿名函数的理解(透彻版)
    使用Emmet(前身Zen Coding)加速Web前端开发
    实现IE6-Ie8媒体查询
    css3常用伪类选择器
    ScriptManager,updatepanel中按钮事件不兼容IE10以后版本
    UpdatePanel中弹出不能弹出消息
    页面缓冲显示正在加载图片
    练习JsonJquery查找数据
    Ajax练习:使用jQuery验证用户名是否存在
    使用Android SDK中的WebView
  • 原文地址:https://www.cnblogs.com/dust/p/1211592.html
Copyright © 2011-2022 走看看