我不知道如何解决B部分(至少使用动态编程算法),因为据我所知,N天的最佳成本与N-1天的最佳成本无关。我不是在寻找有人为我做功课(我知道这里不赞成),但只是为了一些指导,从哪里开始,或者将其分成什么子问题。谢谢!
答案 0 :(得分:0)
(我喜欢你很谦虚所以我试图在这里提供一些提示......也请尝试使用纯文本,用你自己的话来简化问题,如果可以,下次:)欢迎来到社区。 em>)
b部分的问题陈述已经给出了一个很好的提示:使用2D数组来存储状态。这是因为它不足以知道一周 i-1 的最佳解决方案(这是贪婪的,你应该在第一部分回答它),这意味着我们必须知道除了周数之外的其他东西,这是第二个维度。
因此,让我们开始思考可能的二维方式,它们代表什么以及如何使用它们来找到我们的最佳答案。在这里,我介绍了自己关于DP问题的思考过程,它几乎填补了空白游戏。
直观地说,一个维度必须是 i 的一周,因此它可能取决于前几周 i-1,i-2 ......等等
因此,让 D(i,?)成为2D状态,它代表我们必须支付的最低费用 i 。
这是说 D(i,?)=直至第i周的最低费用,xxx为yyy
什么是 xxx,yyy ? 公司X和当前公司的使用情况怎么样?让它适合它,看它是否有意义(这是我的思考过程,通过经验进行大量试验和错误,看看哪一个似乎是正确的)
D(i,X):=直到第i周的最低成本,公司X是当前使用的公司
所以我们有一个2D状态D(i,X),它可以用2D数组D [52] [3]来表示。
现在我们已经改变了问题
从最低成本到第一周我是什么时候?
到使用公司X作为最后一周的最低成本是多少 公司用过?
对于Simplicity,我将在下面使用D(i,A),D(i,B)和D(i,C)作为符号。
如果我们已经知道 i-1 的最佳解决方案使用特定公司,那么我们可以计算当前周 i 最佳解决方案。
这是因为它只考虑所有情况,相互排斥。在所有情况下,我的意思是无论哪一周,你都必须使用这三家公司中的一家。
它具有所谓的 optimal substructure 属性:例如,计算D(i,A),D(i-1,A),D(i)的最佳路径如果需要,包括惩罚的-1,B),D(i-1,C)必须给出D(i,A)的最优解。因为如果有一些路径 i-1 不是最佳的(无论哪家公司),我总是可以选择另一条最优的路径,并用它来计算D(i,A)哪个一定更好。
请注意,如果我们不考虑第二个维度当前公司,原始问题将没有此属性,因此贪婪不能直接解决。
使用另一个名为overlapping subproblems的属性,现在我们的新问题可以通过动态编程来解决。
当我们解决新问题时,我们可以使用新问题的解来解决我们原来的问题: Ans = Max(D(52,A),D(52,B),D(52) ,C))
好的,所以我在这里给你一些补充空白游戏,这可能有助于你完成这个问题。
填写所有这些,你很好。