【题目描述】
果园里有n颗果树,每棵果树都有一个编号i(1≤i≤n)。小明已经把每棵果树上的果子都摘下来堆在了这棵树的下方,每棵树下方的果子体积为ai。
现在小明将拿来m个袋子把这些果子都装进袋子里。每个袋子的体积为v。小明会按照如下规则把果子装进袋子里:
(a)从第1棵果树开始装起,由1到n一直装到第n棵果树。
(b)如果这棵果树下的果子能全部装进当前这个袋子,就装进去;如果不能,就关上当前这个袋子,打开一个新的袋子开始装。
小明希望在能把所有果子都装进袋子里的前提下,v尽量小。m个袋子并不一定都要装进果子。
【题解】
这个题是让我们求最小的容积在m个及其以内的情况下来装下所有的果子。在枚举的过程中,这个m显然是要逐步减小的,也就是说这个二分是向左平移的。此外,我们还需要知道枚举的上界,也就是初始的rg值,这里应该是最大可能容积,也就是所有果子的体积和。
(这道题就是向右平移的:CodeVS1725)
当然,我们还需要check函数来取舍答案,这里直接用check函数来模拟装果子的过程,计算需要的袋子个数,比对就行了。
#include<cstdio>
#include<cstring&g