zoukankan      html  css  js  c++  java
  • Leetcode 650

    先用几个例子来探究如何做题。

    1 -> n = 0

    2 -> copy, paste -> n = 2

    3 -> copy, paste, paste -> n = 3

    4 -> c p p p/ c p c p -> n = 4

    5 -> c p p p p -> n = 5

    6 -> c p c p p / c p p c p-> n = 5

    8 -> c p c p c p -> n = 6

    30 -> c p c p p c p p p p/ c p p p p c p c p p -> n = 10

    容易发现,如果我们把一个数分解成 a * b * c...,那么最小的 copy/paste 次数就是 a + b + c + ...

    怎么证明这一点呢?

    首先我们证明 a + b + c... 次操作的确可以得到 a * b * c * ...

    假设当前记事本中有 n 个数,那么我们对其进行一次 copy 和 (m - 1) 次 paste 之后,得到的就是 n + (m - 1) * n = m * n

    因此通过 m 次操作,我们可以将原有的数变成 n * m。

    最开始的时候 n = 1,因此通过 a + b + c... 次操作, n 就变成了 1 * a * b * c...

    那么为什么质因数分解可以得到最小次数的操作呢?假设我们的分解方案中存在合数,因为 a * b >= a + b,将合数分解能降低或保持总和不变,因此分解为质因数就是最优方案。

  • 相关阅读:
    POJ 1300 Open Door
    POJ 2230 Watchcow
    codevs 1028 花店橱窗布置
    codevs 1021 玛丽卡
    codevs 1519 过路费
    codevs 3287 货车运输
    codevs 3305 水果姐逛水果街二
    codevs 1036 商务旅行
    codevs 4605 LCA
    POJ 1330 Nearest Common Ancestors
  • 原文地址:https://www.cnblogs.com/KakagouLT/p/15311267.html
Copyright © 2011-2022 走看看