zoukankan      html  css  js  c++  java
  • UVa 1149 (贪心) Bin Packing

    首先对物品按重量从小到大排序排序。

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

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

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

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

     1 #include <cstdio>
     2 #include <algorithm>
     3 using namespace std;
     4 
     5 const int maxn = 100000 + 10;
     6 int a[maxn];
     7 
     8 int main()
     9 {
    10     //freopen("in.txt", "r", stdin);
    11 
    12     int T; scanf("%d", &T);
    13     for(int kase = 0; kase < T; kase++)
    14     {
    15         if(kase) puts("");
    16         int n, l;
    17         scanf("%d%d", &n, &l);
    18         for(int i = 0; i < n; i++) scanf("%d", &a[i]);
    19         sort(a, a + n);
    20         int head = 0, rear = n - 1, cnt = 0;
    21         while(head <= rear)
    22         {
    23             cnt++;
    24             if(head == rear) head++;
    25             else if(a[head] + a[rear] <= l) { head++; rear--; }
    26             else rear--;
    27         }
    28         printf("%d
    ", cnt);
    29     }
    30 
    31     return 0;
    32 }
    代码君
  • 相关阅读:
    docker架构的详解
    docker的核心原理-cgroup
    网络运维面试题
    100道linux运维笔试题
    运维岗位面试题集合
    python——筛子游戏
    同道前辈
    delphi中使用SocketStream读写数据的技巧
    百度地图API
    HTML中小meta的大作用
  • 原文地址:https://www.cnblogs.com/AOQNRMGYXLMV/p/4447158.html
Copyright © 2011-2022 走看看