zoukankan      html  css  js  c++  java
  • hdu 3177 Crixalis's Equipment(贪心)

    Problem Description
    Crixalis - Sand King used to be a giant scorpion(蝎子) in the deserts of Kalimdor. Though he's a guardian of Lich King now, he keeps the living habit of a scorpion like living underground and digging holes.

    Someday Crixalis decides to move to another nice place and build a new house for himself (Actually it's just a new hole). As he collected a lot of equipment, he needs to dig a hole beside his new house to store them. This hole has a volume of V units, and Crixalis has N equipment, each of them needs Ai units of space. When dragging his equipment into the hole, Crixalis finds that he needs more space to ensure everything is placed well. Actually, the ith equipment needs Bi units of space during the moving. More precisely Crixalis can not move equipment into the hole unless there are Bi units of space left. After it moved in, the volume of the hole will decrease by Ai. Crixalis wonders if he can move all his equipment into the new hole and he turns to you for help.
     
    Input
    The first line contains an integer T, indicating the number of test cases. Then follows T cases, each one contains N + 1 lines. The first line contains 2 integers: V, volume of a hole and N, number of equipment respectively. The next N lines contain N pairs of integers: Ai and Bi.
    0<T<= 10, 0<V<10000, 0<N<1000, 0 <Ai< V, Ai <= Bi < 1000.
     
    Output
    For each case output "Yes" if Crixalis can move all his equipment into the new hole or else output "No".
     
    Sample Input
    2 20 3 10 20 3 10 1 7 10 2 1 10 2 11
     
    Sample Output
    Yes No
     

    题意:要搬一些装备进入洞穴,洞的空间为V,他有N件装备,每件装备需要Ai的空间摆放,并且在把装备搬入洞穴的时候,需要Bi空间,某件装备摆放完毕后,洞穴内减少Ai的体积,问是否能把所有装备都搬入洞穴,可以输Yes,不可以输出No

     

    思路:

    这题按Bi大小排序是不可以的。

    比如一组数据中 V = 22

    2件装备A1 = 19  B1 = 21

               A2 = 1   B2 = 20

    那么如果按B的大小从大到小排序,则先搬第一件,再搬第二件,那么就无法把2件装备都搬入洞穴,而如果先搬第二件物品,搬完后洞穴剩余空间还有21,可以再搬第一件物品,就可以把2个装备全部搬入洞穴。

     

    所以应该考虑瞬时最大体积。还是举原来这个例子,如果先搬第一件物品,再搬第二件物品,需要的瞬时空间最大为19+20 = 39,而先搬第二件物品再搬第一件物品,需要最大的瞬时空间为1+21 = 22

    所以要比较的是 A1 + B2 与 A2 + B1 的大小, 若A1 + B2 < A2 + B1 

    即 A1 - B1 < A2 - B2 则先搬第一个。所以按Ai - Bi排序即可。

     

     

    #include <iostream>
    #include <cstring>
    #include <cstdio>
    #include <string>
    #include <algorithm>
    using namespace std;
    #define maxn 1010
    int T, N, V;
    bool flag;
    struct Node{
        int a, b;
    }node[maxn];
    bool cmp(Node x, Node y){
        return (x.a - x.b) < (y.a - y.b);
    }
    int main(){
        scanf("%d", &T);
        while(T--){
            scanf("%d%d", &V, &N);
            for(int i = 1; i <= N; i++){
                scanf("%d%d", &node[i].a, &node[i].b);
            }
            sort(node+1, node+1+N, cmp);
            
            flag = true;
            for(int i = 1; i <= N; i++){
                if(node[i].b <= V){
                    V -= node[i].a;
                }
                else{
                    flag = false;
                    break;
                }
            }
            if(flag) printf("Yes
    ");
            else printf("No
    ");
            
        }
        
        return 0;
    }

     

     

     
     
  • 相关阅读:
    windows 7下matlab R2010a输入乱码的解决方案
    用 Microsoft Visual C++ 创建一个使用 wpcap.dll 的应用程序,
    E: oss4dkms: 子进程 脚本出错postinstallation 安装升级更新时出错的解决方法
    关于linux下面挂载Windows硬盘,但是无法在Windows下看到数据
    如何读取多个文件,文件后缀名不一致,不过类似source.1 source.2 source.3等
    Fedora 12 13 14基础环境配置
    linux内核空间与用户空间信息交互方法
    HDU 1232 畅通工程(最小生成树+并查集)
    hdu 2647 Reward(拓扑排序,反着来)
    HDU 1532 Drainage Ditches (最大网络流)
  • 原文地址:https://www.cnblogs.com/titicia/p/3879012.html
Copyright © 2011-2022 走看看