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

     

     

     
     
  • 相关阅读:
    UnicodeEncodeError: 'ascii' codec can't encode characters in position 32-34: ordinal not in range(128) 解决
    selenium 页面元素定位之iframe里面的元素定位(包括有无id、name的)
    Python单元测试框架
    python 学习笔记之条件循环等语句
    selenium python脚本调用java script 报Message: u'$ is not defined' ; Stacktrace 的解决历程
    selenium2 webdriver 常用的python 函数
    python学习笔记之列表、元组、字典(2)
    python学习笔记之列表、元组、字典(1)
    python 学习笔记之基础知识(2)
    python 学习笔记之基础知识(1)
  • 原文地址:https://www.cnblogs.com/titicia/p/3879012.html
Copyright © 2011-2022 走看看