算法求助

  • a
    arkle
    有m个圆,半径均为整数,要求从中切出n个面积相等的块,每个块只能来自于一个圆(即不能用不同的圆切几个小块拼成一个大块)
    求能切的最大面积。

    例1
    m = 6 半径 1,1,1,2,2,3, m = 6则最大面积时 9*pi/4;
    例2
    m = 3 半径4,3,3 m=3 最大面积时 9*pi

    [本帖最后由 arkle 于 2019-11-6 08:37 编辑]
  • b
    b0207191
    没看懂
  • c
    cc0128
    看不懂题
  • f
    fooltiger
    把数组过一遍,得到一个半径最小值,一个半径最大值,最大半径除最小半径向下取整就是n的个数,n乘最小半径的面积就行了。


    讲真我也没看懂题,这是就我的理解来讲的。

    ________
    好吧完全不是我理解的这回事

    本帖最后由 fooltiger 于 2019-11-6 08:42 通过手机版编辑
  • a
    arkle
    自己顶一下:)
  • f
    fooltiger
    先把数组过一遍,得到所有不同半径值和每个半径里圆的数量。

    上一级的圆的半径大于下一级的√2倍的时候,视作四个碎片。否则视作一个碎片。然后半径继续大可以视作更多的碎片,这个我没草稿纸不细推了。
    当n小于m的时候,如果最上一级的数量大于等于n,那就直接最上一级的不用切。如果最上一级的小于n,最上一级加上次上一级大于等于n,那就次上一级不用切。如果次上一级加上最上一级小于n,最上一级的半径大于次上一级的√2,那么最上一级x4加上次上一级看是不是大于等于n,等等等等,堆if else。
    当n大于m的时候懒得写了,也类似把,堆if else。
    ______
    不怎么好,看下面的

    本帖最后由 fooltiger 于 2019-11-6 09:22 通过手机版编辑
  • f
    fooltiger
    啊,不用穷举,这个弄个矩阵应该挺快,每一行对应一个半径,行里的元素代表这个半径的圆能相当于几个下一级半径的圆,然后列求和跟n比较就行了。

    本帖最后由 fooltiger 于 2019-11-6 09:10 通过手机版编辑
  • q
    qqsunan
    Posted by: Xiaomi Redmi Note 3
    这好像不是要求程序实例,要笔算极值求和
  • f
    fooltiger
    弄个矩阵,很快的,111 22 3的矩阵就是

    1 4 9
    0 2 2
    0 0 3

    列求和跟n比较就行了。

    433的矩阵是
    1 1
    0 2

    本帖最后由 fooltiger 于 2019-11-6 09:16 通过手机版编辑
  • z
    zsj1zsj
  • a
    arkle
    多谢各位的帮助:)