Bin Packing UVA

来源:互联网 发布:淘宝分销是什么意思 编辑:程序博客网 时间:2024/06/15 21:43

很简单的一道题目,将输入的数据进行从小到大排序,然后分别从最左边以及最右边开始进行判断,如果最左的值以及最右的值之和超过了上限,那么就只能将最右的物体单独放在一个包中,同时将最右边的下标更新,如果二者的值之和没有超过上限,那么就将二者同时放在一起,同时更新两个下标的值,每次都要记录已经使用的包的数量,最后输出最终的结果即可,具体实现见如下代码:

#include<iostream>#include<vector>#include<string>#include<set>#include<stack>#include<queue>#include<map>#include<algorithm>#include<cmath>#include<iomanip>#include<cstring>#include<sstream>#include<cstdio>#include<deque>#include<functional>using namespace std;int main(){int T;cin >> T;while (T--){int n, l;cin >> n >> l;vector<int> data;for (int i = 0; i < n; i++){int t;cin >> t;data.push_back(t);}int amount = 0;sort(data.begin(), data.end());int l1 = 0, r1 = data.size()-1;while (l1 <= r1){if (data[l1] + data[r1] <= l) l1++, r1--, amount++;else r1--, amount++;}cout << amount << endl;if (T) cout << endl;}return 0;}