UVa 1149 Bin Packing 题解

Posted alrond

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UVa 1149 Bin Packing 题解相关的知识,希望对你有一定的参考价值。

难度:α

用时:25 min

题目:??

代码:??

 

这是一道赤裸裸的贪心题。赤裸到和模版题差不多了。

 

所以下面长话短说。

 

朴素的算法是直接统计。

在这之上因为要贪心,所以做点小手段,记录一下可以被连带走的物体。

1 for (int i = 0; i < n; i++) {
2     if (taken[i]) continue;
3     ans++;
4     int iter = upper_bound(l, l+n, L-l[i]) - l; iter--;
5     while (iter > i && taken[iter]) iter--;
6     if (iter >= 0) taken[iter] = 1;
7 }

第 2 行就是被带走后的处理。不计数。这样其实效率比较低,我看排行上全是 10 ms 过,然而我 20 ms。(差不多了差不多了~~)

(我懒得写效率高的代码,不划算~~)

 

那么配对的方法是什么呢?用到了我今天才学会的 upper_bound。没错,我今天才学会。(这不是重点好吗)

 

upper_bound 找到第一个大于的位置。那么减去一个就是最后一个小于等于的位置。(这是我从紫书上学来的技巧~~)

 

下面的就是找到一个还没有被带走的物体了。注意边界问题,小心 RE。(我恨 RE !!)

 

2018-02-05

以上是关于UVa 1149 Bin Packing 题解的主要内容,如果未能解决你的问题,请参考以下文章

UVa1149 Bin Packing (贪心)

UVa 1149 - Bin Packing

Uva1149

UVA 10005 Packing polygons(最小圆覆盖)

UVa 1149 装箱

Codeforces 1149 题解