Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 最小化最大乘积(糖果和气球)的算法_Algorithm_Sorting_Greedy_Minimize_Minimax - Fatal编程技术网

Algorithm 最小化最大乘积(糖果和气球)的算法

Algorithm 最小化最大乘积(糖果和气球)的算法,algorithm,sorting,greedy,minimize,minimax,Algorithm,Sorting,Greedy,Minimize,Minimax,您好,我需要以下问题的帮助: 我们有m气球和无限量的糖果。 一些孩子希望我们在每一天(数组n)给他ni气球。 他还有一个税务数组b——这是第i天的税务bi 如果我们在那天给孩子ni气球i,他会很高兴。如果我们在i那天给孩子k气球k

您好,我需要以下问题的帮助:
我们有
m
气球和无限量的糖果。
一些孩子希望我们在每一天(数组
n
)给他
ni
气球。
他还有一个税务数组
b
——这是第
i天的税务
bi
如果我们在那天给孩子
ni
气球
i
,他会很高兴。如果我们在
i
那天给孩子
k
气球
k
,我们必须给孩子
(ni-k)*bi
糖果。
我们必须以这样的方式发放气球,以尽量减少我们在某一天发放的最大糖果量。
示例:
我们有
6个
气球
(m=6)

我们用下面的方法给气球

g = 0, 0, 2, 2, 2  
这样,我们必须在第3天(索引从1开始)给出最大
(3-2)*5=5


请帮我找到解决这个问题的有效方法。我目前的解决方案是贪婪的,每次只移除一个气球,但速度太慢了,因为
m<10^18
<代码>人工智能<10^9 bi<10^9 n<10^5

一种方法是通过二进制搜索达到最大每日税收的最小值

假设最大日税为当前的
T
(在0和第一次迭代可能的最大日税之间的一半)。找到每天所需的气球数量,使其不超过当前的
T\u
。所有这些引出序号的总和为
M\u current
。如果
M_current
大于输入
M
,则为下一次迭代假设大于
T_current
,如果小于,则为下一次迭代假设小于
T_current


在每次迭代中,您将
T
的搜索域一分为二。继续二进制搜索以查找
T\u current
,从而
M\u current==M
。一旦你有了这个
T\u current
你也有了气球的分布。

也许一个接一个的删除是好的,但是你必须每天有一个分类的税单,并且在每次删除后更新它,并且总是从列表中的第一项删除气球。此外,如果
m
接近
ni
之和,那么从相反的方向开始,增加税收而不是取消税收可能会更有效^9@Dialecticus我这样做了,但是它被超过了时间限制,因为m<10^18
g = 0, 0, 2, 2, 2