您的位置:首页 > 其它

UVa 1149 (贪心) Bin Packing

2015-04-22 13:06 453 查看
首先对物品按重量从小到大排序排序。

因为每个背包最多装两个物品,所以直觉上是最轻的和最重的放一起最节省空间。

考虑最轻的物品i和最重的物品j,如果ij可以放在一个包里那就放在一起。

否则的话,j只能自己单独放在一个包里,因为最轻的都不行,其他物品就更不可能和j放在一起了。

如果j可以和多个物品放在一起,那么j和最轻的i放一起,剩下的一定能和除j外最重的放一起。

#include <cstdio>
#include <algorithm>
using namespace std;

const int maxn = 100000 + 10;
int a[maxn];

int main()
{
//freopen("in.txt", "r", stdin);

int T; scanf("%d", &T);
for(int kase = 0; kase < T; kase++)
{
if(kase) puts("");
int n, l;
scanf("%d%d", &n, &l);
for(int i = 0; i < n; i++) scanf("%d", &a[i]);
sort(a, a + n);
int head = 0, rear = n - 1, cnt = 0;
while(head <= rear)
{
cnt++;
if(head == rear) head++;
else if(a[head] + a[rear] <= l) { head++; rear--; }
else rear--;
}
printf("%d\n", cnt);
}

return 0;
}


代码君
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: