uva11400照明系统设计

从最简单的情况一步一步分析。
首先把灯泡按电压高低排序,第1种电压最低。
先只考虑第1种灯泡,没得改。然后考虑前2种灯泡,第2种灯泡可以去替换第1种灯泡,原则是省钱。如果第2种灯泡单价比较便宜,换不换?当然换,而且是把第1种全都换了。如果第2种单价贵,换不换需要试一试,把第1种换完省下一个电源钱,看看最后省没省钱。至此得到第一个结论,如果某种灯泡要被换成其他的,那一定是全部换成另外一种。考虑前2种,我们知道怎么做最划算了,再考虑前3种。前两种先按照先前最优的做法处理一下,然后引入第三种,如果第1种可以被第2种换掉,第1种就没有存在的价值了,问题退化到2种的情形。如果第1种不可以被第2种换掉,我们再考虑第3种。此时,如果第3种单价比前2种都便宜,毫无疑问换掉前2种。如果只比第2种便宜,换掉第2种,问题退化。所以我们只考虑比前两种都贵的情形。这时我们有4种决策:1.不换;2.只换第一种;3.只换第二种;4.换两种。这种枚举的时间复杂度是指数级的,我们看看能不能通过分析将它降维。考虑第2种决策,其实它一定不可以,因为此时第2种的单价是比第3种要便宜的,而第1种不可以被第2种换掉,说明即使用单价更便宜的2来换1也不能省钱,用3就更不行了。由此我们得到一个重要启示:很可能只需要一个线性枚举,而且最好能仅仅是在前面最优的前提下线性枚举就递推得到新的最优解。下面我们来证明这件事情。假设灯泡类型小于等于k时的最优解的结构可以这样构造:第2种向前替换或不替换第1种,第3种向前替换到某个位置,第4种向前替换到某个位置……第k种向前替换到某个位置。我们证明k+1个的最优解结构也具有相同的构造方式。我们先看k+1的是否能够替换k,如果可以,那么问题首先被降级到了k的情形,应用假设所以k+1也成立。如果不可以,那么k+1就不能替换前面任何一种,因为如果它能替换k-1,那么用k替换一定更好,所以不能替换k-1,依次类推,不能替换k-2、k-3……2、1。所以k+1只保留自己必要的数量,不去替换任何别的。剩下的k个则需要达到自己的最优解,应用假设,k+1的情况也成立。

经过了一天,刚才又看了一篇博客,总结出第二种更简明的思路。
按照动态规划的思想,设d[i]为前i个灯泡的最优解,然后考虑d[i+1]的情况,i+1要向前替换某些灯泡,然后把问题化解为子问题的枚举,既然要化解为子问题,那么i+1只能从最末尾连续地向前替换,对吧。所以这就有可能有漏解,幸运的是,我们可以证明不会漏解。我们证明这个事情:最优解中灯泡的类型一定连续。假设不是这样,最优解中就存在a,b1,b2…,a这样的序列(可能没有b2),如果b1不能被a替换,那说明b1的单价比a便宜,否则没有任何理由不换它,但是如果它比a便宜,那用它换前面的a不是更省钱?瞬间证明了最优解中灯泡的类型一定是连续的。

你可能感兴趣的:(uva11400照明系统设计)