把题目转换成 x+y=z abs(x-y)<=k 的形式。x代表天平的一侧,y代表天平的另外一侧。 就变成了 把一些物品分成两堆,两堆的差小于等于k 。并且两边的物品不相同。 - -然后用到dp。修改一下的dp。 对于每一个可行解i。去寻找(i+m)/2 到(i+m)/2-m 的区间内是否可以组合。 然后为了避免冲突,将大于(i+m)/2 的 数字在dp中删除。之后再检查i是否存在。 如果存在就查找区间。区间内存在就是最大值。 #include <bits/stdc++.h> using namespace std; #define mo 100054 int a[mo]; ...