bnu 1069 按位贪心,二的幂次

bnu 1069 按位贪心,二的幂次
http://acm.cist.bnu.edu.cn/contest/problem_show.php?pid=1069

给一些物品,虚拟币价格v[i]=2^(ki-1),实际价值w[i].现给S个虚拟币.要求把这些虚拟币恰好花完,并且购得物品的实际价值总和最大.

显然,可行的购买方案必能将所购物品分成若干组,其中每组的总价格为2^(pi-1),其中pi为S的二进制表示为1的所有位.

因此可以按位贪心,从S的最低位开始.设当前处理第k位:
1.选取剩余物品价格为2^(k-1)中价值最大的那个,如果没有价格为2^(k-1)的物品,则表示任务无法达成.
2.将其它价格为2^(k-1)的物品,按价值从大到小排序,相邻两个合并成价格为2^k的物品,累积到下一阶段.

这里挖掘出的贪心性质为: 一个数第k位的1,只能由不高于第k位的1合成得到.

你可能感兴趣的:(bnu 1069 按位贪心,二的幂次)