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能写的非常漂亮。可惜,“我只猜中了故事开头,却没猜到故事的结局”。
  • 相关阅读:
    Hibernate整合Druid数据库连接池遇到的问题整合
    Spring 整合quartz 时 定时任务被调用两次以及quartz 的配置
    BigDecimal divide:Non-terminating decimal expansion; no exact representable decimal result.
    Hibernate: Encountered a duplicated sql alias [] during auto-discovery of a native-sql
    oracle与mysql的区别
    搜索评价指标——NDCG
    java 动态修改注解值
    eclipse 取消置顶
    Xiangqi
    All in All
  • 原文地址:https://www.cnblogs.com/dust/p/1211592.html
Copyright © 2011-2022 走看看