简单地贪心。。。。先排序,然后看最小的a和最大的b能否在同一条船上,若不能,则船数加1,b--;若能则 a++ , b--,ans++ ;
//
// main.cpp
// uva 1149 - Bin Packing
//
// Created by XD on 15/8/15.
// Copyright (c) 2015年 XD. All rights reserved.
//
#include <iostream>
#include <string>
#include <queue>
#include <stack>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include<vector>
#include <string.h>
#include <string>
#include <algorithm>
#include <set>
#include <map>
#include <cstdio>
using namespace std ;
const int maxn = 100000 + 5;
int bin[maxn] ;
int main(int argc, const char * argv[]) {
int n ,ans,l,T;scanf("%d" ,&T) ;
int flag = 1 ;
while (T--) {
if (!flag) {
printf("\n") ;
}flag = 0 ;
scanf("%d%d" ,&n,&l) ;
for (int i = 0; i < n ; i++) {
scanf("%d" ,&bin[i]) ;
}
sort(bin, bin + n ) ;
int x=0 , y = n-1 ;
ans =0 ;
while (x <=y) {
if (x == y ) {
ans++ ; break ;
}
int tl = bin[x] + bin[y] ;
if (tl<=l) {
ans++ ; x++ ; y-- ;
}
else if(tl > l )
{
ans++ ; y-- ;
}
}
printf("%d\n" , ans) ;
}
return 0;
}
本文介绍了解决UVA1149-BinPacking问题的一种贪心算法实现方法。通过将物品按重量排序后,尽可能地将最轻和最重的物品配对装入同一艘船中,以此来减少所需的船只数量。如果最轻和最重物品的总重量不超过船只的承载限制,则同时移除这两个物品;否则仅移除最重物品,并为它单独分配一艘船。此算法确保了尽可能高效地利用每艘船的空间。
290

被折叠的 条评论
为什么被折叠?



