zoukankan      html  css  js  c++  java
  • HDU 4296 Buildings (YY)

    题意: 给定N个物体,每个物体有两个参数w,s。   w代表它自身的重量; s代表它的强度。现在要把这些物体叠在一起,会产生一个PDV值。

    PDV解释:(Σwj)-si, where (Σwj) stands for sum of weight of all floors above.即为在i物体上方所有物体的重量和 - i的强度。

    现在希望最大的PDV值最小....................


    YY: 假设两个物体i,j,把谁放上面比较好? 假设把i放上面,则pdv1 = Wi - Sj;把j放上面 则pdv2 = Wj - Si;要使得pdv尽量小,设pdv1 < pdv2 则 Wi + Si < Wj + Sj

    所以按照w+s由小到大sort,就能满足条件了......


    #include <iostream>
    #include <algorithm>
    #include <cmath>
    #include<functional>
    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <string>
    #include <vector>
    #include <set>
    #include <queue>
    #include <stack>
    #include <climits>//形如INT_MAX一类的
    #define MAX 100005
    #define INF 0x7FFFFFFF
    using namespace std;
    
    struct node {
        int w,s;
    }a[MAX];
    int n;
    
    bool cmp(const node &x, const node &y) {
        return x.w + x.s < y.w + y.s;
    }
    int main() {
        while(scanf("%d",&n) != EOF) {
            for(int i=0; i<n; i++) {
                scanf("%d%d",&a[i].w,&a[i].s);
            }
            sort(a,a+n,cmp);
            __int64 sum = 0;
            __int64 pdv = -INF;
            for(int i=1; i<n; i++) {
                sum += a[i-1].w;
                pdv = max(pdv,sum - a[i].s);
            }
            if(pdv < 0) printf("0
    ");
            else printf("%I64d
    ",pdv);
        }
        return 0;
    }
    


  • 相关阅读:
    同类分布[AHOI2009]
    简单记录一下ruby 循环
    ruby中的respond to ?用法
    ruby中的return方法及class实例方法的initialize方法
    ruby中的字符串分隔符--split
    三次握手+四次挥手
    DNS服务器的简介——2
    HTTP-报文结构解析
    ruby中的三目操作符和include?操作
    ruby中的extend 和 include
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3306222.html
Copyright © 2011-2022 走看看