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^410^5 ,然后加上(t-1)*LCM(贪心最大) .

证明:

考虑LCM+R的每一个不能填状态 ,假如这个LCM+R的最大值在最右边如图:

考虑这个最大最右状态的转移,很明显,这个情况不管怎么转移都是下一个区间的最大

考虑b的转移,如果bd显然小于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 .

 

View Code

 

posted on 2011-10-17 22:51  yaoz10051538  阅读(1753)  评论(2编辑  收藏  举报

导航