算法求助
- 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 编辑] - b0207191没看懂
- cc0128看不懂题
- fooltiger把数组过一遍,得到一个半径最小值,一个半径最大值,最大半径除最小半径向下取整就是n的个数,n乘最小半径的面积就行了。
讲真我也没看懂题,这是就我的理解来讲的。
________
好吧完全不是我理解的这回事
本帖最后由 fooltiger 于 2019-11-6 08:42 通过手机版编辑 - arkle自己顶一下:)
- fooltiger先把数组过一遍,得到所有不同半径值和每个半径里圆的数量。
上一级的圆的半径大于下一级的√2倍的时候,视作四个碎片。否则视作一个碎片。然后半径继续大可以视作更多的碎片,这个我没草稿纸不细推了。
当n小于m的时候,如果最上一级的数量大于等于n,那就直接最上一级的不用切。如果最上一级的小于n,最上一级加上次上一级大于等于n,那就次上一级不用切。如果次上一级加上最上一级小于n,最上一级的半径大于次上一级的√2,那么最上一级x4加上次上一级看是不是大于等于n,等等等等,堆if else。
当n大于m的时候懒得写了,也类似把,堆if else。
______
不怎么好,看下面的
本帖最后由 fooltiger 于 2019-11-6 09:22 通过手机版编辑 - fooltiger啊,不用穷举,这个弄个矩阵应该挺快,每一行对应一个半径,行里的元素代表这个半径的圆能相当于几个下一级半径的圆,然后列求和跟n比较就行了。
本帖最后由 fooltiger 于 2019-11-6 09:10 通过手机版编辑 - qqsunanPosted by: Xiaomi Redmi Note 3
这好像不是要求程序实例,要笔算极值求和 - 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 通过手机版编辑 - zsj1zsj
- arkle多谢各位的帮助:)