E - 贪心

Crawling in process... Crawling failed Time Limit:2000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u

Submit Status

Description

  Have you ever heard the story of Blue.Mary, the great civil engineer? Unlike Mr. Wolowitz, Dr. Blue.Mary has accomplished many great projects, one of which is the Guanghua Building.
  The public opinion is that Guanghua Building is nothing more than one of hundreds of modern skyscrapers recently built in Shanghai, and sadly, they are all wrong. Blue.Mary the great civil engineer had try a completely new evolutionary building method in project of Guanghua Building. That is, to build all the floors at first, then stack them up forming a complete building.
  Believe it or not, he did it (in secret manner). Now you are face the same problem Blue.Mary once stuck in: Place floors in a good way.
  Each floor has its own weight w i and strength s i. When floors are stacked up, each floor has PDV(Potential Damage Value) equal to (Σw j)-s i, where (Σw j) stands for sum of weight of all floors above.
  Blue.Mary, the great civil engineer, would like to minimize PDV of the whole building, denoted as the largest PDV of all floors.
  Now, it’s up to you to calculate this value.
 

Input

  There’re several test cases.
  In each test case, in the first line is a single integer N (1 <= N <= 10 5) denoting the number of building’s floors. The following N lines specify the floors. Each of them contains two integers w i and s i (0 <= w i, s i <= 100000) separated by single spaces.
  Please process until EOF (End Of File).
 

Output

  For each test case, your program should output a single integer in a single line - the minimal PDV of the whole building.
  If no floor would be damaged in a optimal configuration (that is, minimal PDV is non-positive) you should output 0.
 

Sample Input

3
10 6
2 3
5 4
2
2 2
2 2
3
10 3
2 5
3 3

Sample Output

1 0 2
题目大意:现在给你N块板子,每一块木板都有着两个属性,一个是重量w,另一个是承受力s,同时每一块木板会有一个
pdv数值,计算方法为(Σw j)-s i,即所有在其上的木板的重量之和减去他的承受力,问你怎么样放置才能使pdv的最大值
(pdv最大的那块木板)最小。
思路分析:首先,题目要求的是pdv最大的那块木板的pdv值,并不是让所有木板的pdv之和最小,读题时一定要注意!
另外,很显然我们需要对这些木板进行排序,但是我们应该怎么排才能使最大的pdv值最小呢?换言之,我们以什么样的
标准来决定哪块木板在上,哪块木板在下。
对于相邻放置的两块板,设两块板为i,j他们上面的重量为sum
1) a=sum-si;b=sum+wi-sj;

交换两个板的位置

2)a'=sum+wj-si;b'=sum-sj;

如果1优于2,求解得有效的条件为wj-si>wi-sj

即wj+sj>wi+si

所以按si+wi的和排序贪心即可。

贪心好奇妙,感觉贪心虽然是人的天性,但是有的人会贪,有的人不会贪,

很多时候并没有什么道理可言,全靠个人直觉,但是得考虑得全面,我感觉

贪心策略的确定基本可以有两个想法,一个是全自己想,然后自己出数据,

不断的使自己的策略接近正确答案。二是可以先搞少的数据,两个或三个,

列公式确定贪心策略。

代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn=100000+100;
struct nod
{
    int w;
    int s;
};
nod f[maxn];
bool cmp(nod a,nod b)
{
    return a.s+a.w<b.s+b.w;
}
int main()
{
   int n;
   while(scanf("%d",&n)!=EOF)
   {
       __int64 ma=0,sum,t;
       for(int i=0;i<n;i++)
       scanf("%d%d",&f[i].w,&f[i].s);
       sort(f,f+n,cmp);
       sum=f[0].w;
       for(int i=1;i<n;i++)
       {
           t=sum-f[i].s;
           if(t>ma) ma=t;
           sum+=f[i].w;
       }
       printf("%I64d\n",ma);
   }
    return 0;
}

 

hdu4296 贪心的更多相关文章

  1. HDU-4296 Buildings 贪心 从相邻元素的相对位置开始考虑

    题目链接:https://cn.vjudge.net/problem/HDU-4296 题意 有很多板子,每一个板子有重量(w)和承重(s)能力 现规定一块板子的PDV值为其上所有板子的重量和减去这个 ...

  2. 【Python3】【贪心】hdu4296 Buildings

    题意: n个板,每个板有重量和强度w和s,还有PDV值(上面的总重量-该板的强度) 对于某种叠放方式,PDV的最大值为其代表值 求该值的最小值   考虑只有两个板的情况:a和b,很显然下面的比上面的容 ...

  3. BZOJ 1692: [Usaco2007 Dec]队列变换 [后缀数组 贪心]

    1692: [Usaco2007 Dec]队列变换 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1383  Solved: 582[Submit][St ...

  4. HDOJ 1051. Wooden Sticks 贪心 结构体排序

    Wooden Sticks Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) To ...

  5. HDOJ 1009. Fat Mouse' Trade 贪心 结构体排序

    FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  6. BZOJ 1691: [Usaco2007 Dec]挑剔的美食家 [treap 贪心]

    1691: [Usaco2007 Dec]挑剔的美食家 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 786  Solved: 391[Submit][S ...

  7. 【Codeforces 738D】Sea Battle(贪心)

    http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...

  8. 【BZOJ-4245】OR-XOR 按位贪心

    4245: [ONTAK2015]OR-XOR Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 486  Solved: 266[Submit][Sta ...

  9. code vs 1098 均分纸牌(贪心)

    1098 均分纸牌 2002年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解   题目描述 Description 有 N 堆纸牌 ...

随机推荐

  1. nginx入门手册(一)

    1.nginx进程: nginx会启动多个进程: 一个主进程Master. 几个工作进程worker. 缓存加载器进程 缓存管理器进程 master主要工作: 1. 读取并验正配置信息: 2. 创建. ...

  2. linux 下编译安装php

    系统环境: CentOS 6.5 x86_64 下载 PHP 源码包 # wget http://cn2.php.net/distributions/php-5.5.9.tar.bz2 # tar x ...

  3. Linux平台Makefile文件的编写基础篇(转)

    目的:       基本掌握了 make 的用法,能在Linux系统上编程.环境:       Linux系统,或者有一台Linux服务器,通过终端连接.一句话:有Linux编译环境.准备:      ...

  4. 一个poi操作实现导出功能的类

    public class ExportExcel<T> { public void exportExcel(Collection<T> dataset, OutputStrea ...

  5. [UVALive] 6492 Welcome Party(最小点覆盖)

    6492 Welcome Party For many summers, the Agile Crystal Mining company ran an internship program for ...

  6. 调用Android系统设置中的Intent

    开发Android软件时,常常需要打开系统设置或信息界面,来设置相关系统项或查看系统的相关信息,这时我们就可以使用以下语句来实现:(如打开“无线和网络设置”界面) Intent intent = ne ...

  7. 一位搬家师傅的O2O之旅

    一位搬家师傅的O2O之旅 By 诸神之黄昏 | 2014/08/14 [核心提示] 一位普通的搬家师傅,无意中被卷入如火如荼的 O2O 浪潮,起初,互联网让他尝到了甜头,后来则是更多的困惑和不解. 再 ...

  8. window环境下安装 pip 工具 【pip为Python的扩展管理工具】

    Python有一些扩展管理工具,例如easy_install和pip工具,我推荐各位使用pip工具,因为pip工具具有很好的安装和卸载体验. 我们首先需要打开pip的官方网站, 下载必要的文件包,然后 ...

  9. C++指针的操作和运算(转)

    既然指针是一种数据类型,那么它也应该有对应的操作或运算,正如整数能做加减乘除一样.但是每一种操作或运算都应该对这种数据类型有意义.比如两个实数可以用关系运算得知哪个大哪个小,而两个虚数却不能使用关系运 ...

  10. JAVA泛型编程笔记

    1介绍 Java泛型编程是JDK1.5版本后引入的.泛型让编程人员能够使用类型抽象,通常用于集合里面. 下面是一个不用泛型例子: List myIntList=new LinkedList(); // ...