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;
    }

     

     

     
     
  • 相关阅读:
    P1903 [国家集训队]数颜色 / 维护队列 莫对算法
    P1016 旅行家的预算 模拟 贪心
    P3948 数据结构 差分数组
    乘法逆元 模板
    二分法 最大化平均值
    HDU5213 Lucky 莫队算法 容斥定理
    P1083 借教室 差分数组
    发布订阅、redis的配置文件、redis的主从、redis的持久化、
    nosql、redis、性能测试、命令相关、redis的数据类型string、list、hash、set、zset、
    nginx的日志、禁止访问、反向代理、权重、nginx location匹配规则、location分离、WSGI、
  • 原文地址:https://www.cnblogs.com/titicia/p/3879012.html
Copyright © 2011-2022 走看看