zoukankan      html  css  js  c++  java
  • Hdu 4296 building.cpp

    题意:

    给出 n 个木板的重量值和长度 然后每个木板的PDV = 压在他上面的木板的重量值之和-该木板的长度值

    求所有木板中PDV值最大的最小

    给出一个 n 表示木板的数量

    接下来 n 行表示每块木板的重量值和长度值

    求PDV最大的最小

    思路:

    按最优方法排序 然后求最大值

     

    Tips:

    ①如果排序为 a b 则a的PDV = sum-sb       b的PDV = sum+wa-sb

    ②如果排序为 b a 则b的PDV = sum-sa        a的PDV = sum+wb-sa

    要想第一种方法要想最大值的PDV < 第二种方法最大值

    则 wa+sa < wb+sb

    所以排序然后找这种最优方法中的最大值

     

    Code:

    View Code
     1 #include <stdio.h>
     2 #include <cstring>
     3 #include <algorithm>
     4 using namespace std;
     5 #define max(a, b) ((a)>(b)?(a):(b))
     6 const int INF = 0x1f1f1f1f;
     7 
     8 struct Floor
     9 {
    10     int w;
    11     int s;
    12 }floor[100010];
    13 
    14 int cmp(Floor a, Floor b)
    15 {
    16     return a.w+a.s < b.w+b.s;
    17 }
    18 
    19 int main()
    20 {
    21     int i, j, k;
    22     int n;
    23     long long ans, sum;
    24     while(scanf("%d", &n) != EOF)
    25     {
    26         ans = -100000000, sum = 0;
    27 
    28         for(i = 0; i < n; ++i) {
    29             scanf("%d %d", &floor[i].w, &floor[i].s);
    30         }
    31 
    32         sort(floor, floor+n, cmp);
    33 
    34         for(i = 0; i < n; ++i) {
    35             if(i != 0) ans = max(ans, sum-floor[i].s);
    36             sum += floor[i].w;
    37         }
    38 
    39         printf("%I64d\n", ans<0?0:ans);
    40     }
    41     return 0;
    42 }

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4296

  • 相关阅读:
    asp.net 正则表达式
    字符串分隔
    用定时器实现逐渐放大层的功能
    js获取剪贴板内容
    使用无线网卡共享上网
    使用事件探查器跟踪sqlserver进程
    document.all.WebBrowser.ExecWB
    (转)JAVA与.NET DES加密解密
    web打印的实现
    关于div的定位
  • 原文地址:https://www.cnblogs.com/Griselda/p/2689397.html
Copyright © 2011-2022 走看看