UVa-1149 Bin Packing

来源:互联网 发布:鹏业填报软件 编辑:程序博客网 时间:2024/06/07 03:53

n个件物品,有容量为m的背包,每包最多装两件物品,问最少用几个背包?

一种做法是枚举一个,二分另一个。

另一种做法如下。匹配一个最大的,用最小的就可以,这样肯定是最优的。


#include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#define maxn 100010using namespace std;int main(){    int cases, a[maxn];    cin >> cases;    for (int ca = 1; ca <= cases; ca++)    {        int n, m;        cin >> n >> m;        for (int i = 1; i <= n; i++) cin >> a[i];        sort(a+1, a+1+n);        int ans = 0, x = 1, y = n;        while (x <= y)        {            if (a[x]+a[y] <= m) x++;            y--;        }        cout << n-y << endl;        if (ca !=cases) cout << endl;    }}


原创粉丝点击