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