题意大概是:求把总价值分为两个数,使这两个数接近相等,而且这两个数必须由所有设备中的其中几种设备价值构成,并先输出比较大的数,再输出另一个数。
这是一道多重背包的题目,虽然物体本身只有价格这一个属性~~但是可以把这一种属性看做两种属性(价格折半之后,相当于有个属性的限制了),价格本身当两种属性,其次多重背包在空间和时间都比较充裕的情况下可以转换为01背包.
状态量设为d[i][j]意思是拿第i个物体时,背包的剩余容量是j,接下来的背包的最大容量。
状态转移方程是: d[j]=max(d[j],d[j-val[i]]+val[i]) (我拿一维数组做的,LRJ的书下有介绍“滚动数组”)
边界时当i==n时,d[i][j]=0(背包不用装满),这一点很重要,因为查找的数不一定为总数的一边,所以j可以不为0/*13892580 2015-06-14 21:30:34
/*13892580 2015-06-14 21