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

原文地址:https://www.cnblogs.com/Alrond/p/8419550.html

时间: 2024-10-12 23:02:03

UVa 1149 Bin Packing 题解的相关文章

UVA 1149 Bin Packing

传送门 A set of n 1-dimensional items have to be packed in identical bins. All bins have exactly the same length l and each item i has length li ≤ l. We look for a minimal number of bins q such that • each bin contains at most 2 items, • each item is pa

UVA 1149 Bin Packing 二分+贪心

A set of n 1-dimensional items have to be packed in identical bins. All bins have exactly the samelength l and each item i has length li ≤ l. We look for a minimal number of bins q such that• each bin contains at most 2 items,• each item is packed in

uva 1149:Bin Packing(贪心)

题意:给定N物品的重量,背包容量M,一个背包最多放两个东西.问至少多少个背包. 思路:贪心,最大的和最小的放.如果这样都不行,那最大的一定孤独终生.否则,相伴而行. 代码: #include <cstdio> #include <cstring> #include <algorithm> using namespace std; #define N 100100 int a[N]; int main() { int t; scanf("%d", &a

UVA 1149 Bin Packing 装箱(贪心,水)

每次选最大的物品和最小的物品放一起,如果放不下,大物体孤独终生,否则相伴而行... #include<bits/stdc++.h> using namespace std; const int maxn = 1e5+42; int a[maxn]; template<class T> inline void scan_d(T *ret) { char c;*ret=0; while((c=getchar())<'0'||c>'9'); while(c>='0'&a

1149 - Bin Packing(贪心)

这道题可以用贪心算法来实现,对所有物品的长度进行排序,然后先看当前最短的和最长的能否装进一个袋子里,如果不能,这个当前最大的物品要单独放一个袋子,如果可以,将这两个物品放一个袋子,然后i++:j--:重复上述操作. #include<bits/stdc++.h> using namespace std; const int maxn = 100000 + 5; int T,n,l,a[maxn]; int main(){ scanf("%d",&T); while(

POJ 2782 Bin Packing

 Bin Packing Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 5416   Accepted: 2452 Description A set of n 1-dimensional items have to be packed in identical bins. All bins have exactly the same length l and each item i has length li<=l

【习题 8-1 UVA - 1149】Bin Packing

[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 每个背包只能装两个东西. 而且每个东西都要被装进去. 那么我们随意考虑某个物品.(不必要求顺序 这个物品肯定要放进某个背包里面的. 那么背包数递增. 那么剩余的空间. 只能装一个了. 要装谁呢? 肯定是尽可能装较大的.所以用upper_bound-1找一个最大的能装的装就可以了. 这样就能尽量减少体积较大的物品了. [代码] /* 1.Shoud it use long long ? 2.Have you ever test s

UVA, 102 Ecological Bin Packing

题意:给你仨箱子,每个箱子里面有三种瓶子B G C,让你将其分类,使得每个箱子里只有一种瓶子, 每次只能移动一个瓶子,要求移动步数最小,相同则按字典序输出 思路:排列得到顺序有:BCG BGC CBG CGB GBC GCB 六种,都算出来按大小找就行了 ps:输入时顺序为:B G C ,为了方便我排序成了 B C G 代码如下: 1 #include <iostream> 2 #include <cstdio> 3 4 using namespace std; 5 int dat

Bin Packing 贪心

F - 贪心+ 二分 Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit Status Description A set of n<tex2html_verbatim_mark> 1-dimensional items have to be packed in identical bins. All bins have exactly the same length l<te