zoukankan      html  css  js  c++  java
  • 【20181019T2】硬币【矩阵快速幂优化DP】

    题面

    【错解】

    (N leq 50)?双向搜索?

    切了切……

    等下,好像要求方案数……

    好像搜不了

    哎他给(V_{i} | V_{i+1})干嘛?

    肯定有用啊

    为了体现条件的用处,我在搜下一步时把后面的和S除以当前值

    但还是T了啊

    写了个(O(NW^{2}))的完全背包水水,瞎搞了个神奇算法,揉在一起,成功爆零

    【正解】

    (f_{t,i,j})表示选的硬币编号最大为i,最小大于等于j的凑出t的方案数

    这样可以完整地表示出(f_{t,i,j}=sum f_{t_{1},i,k} imes f_{t_{2},k,j})(其中(t_{1}+t_{2}=t,j leq k leq i)

    哎怎么那么眼熟?

    这不就是传说中的……矩阵乘法?

    换一下:

    设矩阵(A_{t})的i行j列表示最大为i,最小大于等于j的凑出t的方案数

    那么有(A_{v_{1}+v_{2}}=A_{v_{1}} imes A_{v_{2}})

    首先预处理凑出每种硬币对应价值有多少种方案

    ①自己动手,丰衣足食

    (A_{i})的最大为i,j不超过i(废话)的方案数为1

    ②从前面凑出来

    (A_{i}=A_{i-1} ^{frac{v[i]}{v[i-1]}})

    两者相加

    然后从大往小跑,每次尽量取完,因为已经包含更小的情况,所以没有遗漏

    搞个矩阵快速幂就好了

    代码

  • 相关阅读:
    go 学习成长之路
    多个ssh key 配置多个网址
    ubuntu 安装 gightingale
    关于open falcon 与nightingale 的一些调研
    kubeadm 命令简介
    windows kubectl 远程操作k8s
    ubuntu18.04 kuebadm 安装 k8s-1.15.9
    kubeadm 如何将节点加入集群
    centos7 kubeadm 搭建k8s
    docker 常用命令
  • 原文地址:https://www.cnblogs.com/lstoi/p/9818467.html
Copyright © 2011-2022 走看看