在this问题中,我们必须找到所需的单张和家庭票的数量,以便价格最低。如果许多安排的价格相同,则以最低票价打印安排。
问题陈述 Acmestan的电影院有两种类型的门票:一张票仅供一人使用,而家庭票则允许父母及其子女进入剧院。毋庸置疑,家庭票价总是高于单张票,有时甚至高于单张票的价格。
家庭决定哪种购票方式最经济,这是非常具有挑战性的。例如,右边图中描绘的家庭有四种票据安排可供选择:七张单票;两张家庭票;一张家庭票(亚当,鲍勃,辛迪)以及其他四张单票;或者,一张家庭票(鲍勃和他的四个孩子)以及其余两张的单票。
编写程序以确定哪种票证安排的价格最低。如果有多个此类安排,请打印具有最少票数的安排。
我的DP方法如下: -
制作家谱。
每个节点都应有字段min_tickets(即最小票数)和min_price(即最低价格)。这些字段表示将该人及其子女带出的最低金额。此外,还有一些字段表示该过程中涉及的家庭票数(fam_tickets)和单票数(sin_tickets)。
从叶节点开始。初始化min_tickets=1
和min_price= S
(即单票价格),fam_tickets=0
,sin_tickets= 1
。
现在其他节点考虑到他的孩子和孙子女。 F是家庭票的价格。对他们来说: -
min_price = min(所有孙子的F + min_price总和,S + 所有孩子的min_price总和)
如果孙子是NULL,我们采用min_price=0 and min_tickets=0
为了找出min_tickets,我们从形成中得出它给我们最低价格。如果两个阵型的价格相同,我们会: -
if(1+ min_tickets of all grandchildren summed > 1+ min_tickets of all children summed) min_tickets = 1+ min_tickets of all children summed; fam_tickets= fam_tickets of all children summed; sin_tickets= 1+ sin_tickets of all children summed; else min_tickets = 1+ min_tickets of all grandchildren summed; fam_tickets= 1+ fam_tickets of all grandchildren summed; sin_tickets= sin_tickets of all grandchildren summed;
此解决方案是否正确?提前谢谢。
答案 0 :(得分:0)
您是否考虑过他们购买两张家庭票以获得最大利润的情况? 在您的解决方案中,似乎在处理adam的节点时,
min_price= min(F + min_price of all grandchildren summed , S + min_price of all children summed)
无效。
我不知道您的实施细节,但这是一个棘手的部分。希望能帮助到你。 :)