有桌子若干,每张桌子上有格子若干,格子大小不同,大小种类有限几种.现有不同体积的球若干.要求把球放进格子中.每个格子放一

有桌子若干,每张桌子上有格子若干,格子大小不同,大小种类有限几种.现有不同体积的球若干.要求把球放进格子中.每个格子放一个球,大格子可以放小球,小格子不能放大球.使用最少的桌子数.
理想不遥远 1年前 已收到1个回答 举报

1234567ok 幼苗

共回答了27个问题采纳率:88.9% 举报

算法思路: 由题意,桌子的数目的决定因素应该是大球的个数(因为大球只能放在大格子里)
设大球有m个,小球有n个, 第i张桌子有大格字A[i]个, 小桌子B[i]个,设需要最少的桌子count 张
初始化 sumbig = 0, count = 0;将每个桌子能容纳的大球个数进行累加,直到sum >= m;while (sumbig < m){ sumbig += A[i]; count++;
}此时大球已经放完了,此时开始放小球,这时可能有两种情况,count张桌子中小格子的数目能够容纳下小球的个数,这时就简单了,直接返回count 就是需要的最少的桌子数 sumsmall = B[1] + B[2] + B[3] +.+B[count-1] + (sumbig - m);注意小括号中的sumbig -m , 原因是第count张桌子上还有剩余的大格子
if( sumsamll < n)
return count; 5. 如果m张桌子都放满后还剩小球,则剩下的小球可以放在后面桌子上的大格子或者小格子中都是可以的 while(sumsmall < n ){sumsmall += A[count] + B[count]; count ++;
} return count;
回答完毕, 语文不太好,所以结合了代码片段和描述的方式.

1年前

5
可能相似的问题
Copyright © 2024 YULUCN.COM - 雨露学习互助 - 16 q. 0.021 s. - webmaster@yulucn.com