运用二进制,折半搜索,其实我觉得本质就是状压思想,,,
枚举前一半所有情况并保存。
然后排序保障总质量越大,价值越大。
这里相当于贪心。
可以证明的,如果在一堆一一对应的数里面,只取一个,另外一个数越大才越有可能是最优解。
这个思想大概只能用在只取一个上面。
再枚举后半部分。
算出每一种枚举方式的总质量,w-wi就是他在前一半的质量,二分搜索一下,就能找到总质量和不大于w的最大价值了。
emmmm最后说一下lower_bound函数,大多数用的都是
ll tv=(lower_bound(ps,ps+m,make_pair(wi,inf)-1)->second;
返回迭代器,指针指向second。
所以lowerbound在比较pair的时候,大概是先比较first,再来second把。所以才要赋值成inf,方便无论first相不相等,都要减一。