hdu 4091 Zombie’s Treasure Chest【2011 ACM Asia Shanghai Regional Problem A】
【关于两个物体进行背包的最大证明】
给定背包体积V,两物体体积v1,v2,价值d1,d2,求其最大的能放入的值 .
令LCM=lcm(v1,v2) , r=V%LCM , t=V/LCM ;
现在证明 如果t>=1 那么 将两物体填到不能填为止一定与 LCM+r的不能再填的状况相对应 ,即空出来的部分相对应 .
假如某个k1v1+k2v2使2LCM+R不能再填满 ,如果k1v1<LCM k2v2<LCM 则明显不成立 ,所以k1v1,k2v2中一定有一个超过LCM 把其中那个减到LCM就到达了LCM+R
证毕 .
所以KLCM+R 都是由LCM+R的状态转移过来的 .
然后先枚举出LCM+R的所有不能填满状态 ,枚举体积较大的那个 ,由于int32限制复杂度最多10^4至10^5 ,然后加上(t-1)*LCM(贪心最大) .
证明:
考虑LCM+R的每一个不能填状态 ,假如这个LCM+R的最大值在最右边如图:
考虑这个最大最右状态的转移,很明显,这个情况不管怎么转移都是下一个区间的最大
考虑b的转移,如果b到d显然小于a->c之后的c值 ,如果b到->c ,如果这个值大于dA+d(a->c)(这个其实是LCMMAX) ,因为转化到下一区间至少为2LCM+R,所以可以减去一段LCM,即一开始的证明,那么c减去一段LCM后大于a的值,与原本a是最大值矛盾 .
再考虑最大非最右状态的情况
如果对于任何d dA+(a->d) 小于 dA+(a->c) 那么c就是下一个区间的最大 ,
如果存在d dA+(a->d) 大于 dA+(a->c) 所以dD=dA+d(LCMMAX) 由于d>2*LCM 所以d可以截去一段LCM进入b ,此时这个值dB大于dA ,与原先a最大的假设矛盾,so..........得出结论 此区间的最大都是由上一区间的同一状态的最大得到 ,起始区间为LCM+R .
posted on 2011-10-17 22:51 yaoz10051538 阅读(1753) 评论(2) 编辑 收藏 举报