HDU4296-ChengduOnling-贪心

某人要搬砖盖一栋楼,有m块砖,每块有两个值w和s,表示重量和强度。楼盖好后每块砖有一个危险值,表示为此砖之上的砖的重量和减此砖的强度,即Σ0(j-1)w - sj。

整体危险值是每块砖危险值的最大值。

这道题当时没想明白就搜了题解,原来是很弱智的一道贪心题。

可以证明,两块砖如果交换后使整体危险值不增加,当且仅当s+w不增加。于是按照s+w值排序,求出最大值即可。

 1 #include <algorithm>
 2 #include <cstring>
 3 #include <ctype.h>
 4 #include <cstdlib>
 5 #include <cstdio>
 6 #include <vector>
 7 #include <string>
 8 #include <queue>
 9 #include <stack>
10 #include <cmath>
11 #include <set>
12 #include <map>
13
14 using namespace std;
15
16 int N,M,T;
17
18 struct Node
19 {
20     int w,s;
21     bool operator < (const struct Node &b) const {return (w+s) < (b.w+b.s);}
22 }save[100010];
23
24 int main()
25 {
26     while(~scanf("%d",&N))
27     {
28         for(int i=0;i<N;i++) scanf("%d %d",&save[i].w,&save[i].s);
29         sort(save,save+N);
30         long long sum = 0,ans = 0;
31         for(int i=1;i<N;i++)
32         {
33             sum += save[i - 1].w;
34             ans = max(ans,sum-save[i].s);
35         }
36         printf("%lld\n",ans);
37     }
38 }
时间: 2024-12-17 15:12:22

HDU4296-ChengduOnling-贪心的相关文章

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

题目链接:https://cn.vjudge.net/problem/HDU-4296 题意 有很多板子,每一个板子有重量(w)和承重(s)能力 现规定一块板子的PDV值为其上所有板子的重量和减去这个板子的承重能力 整个系统的优劣由每块板子中PDV最大值决定,越小越好 求最好系统的最大PDV值 思路 套路题了,一般问最小化系统最大值,就是从相对位置开始考虑 随便找凉快板子,在第一块板子放下面最优的情况,开始讨论 可得w+s越小的越在上面,排序求值即可 提交过程 AC 套路题 代码 #includ

【Python3】【贪心】hdu4296 Buildings

题意: n个板,每个板有重量和强度w和s,还有PDV值(上面的总重量-该板的强度) 对于某种叠放方式,PDV的最大值为其代表值 求该值的最小值 考虑只有两个板的情况:a和b,很显然下面的比上面的容易损坏,所以下面的PDV大.假设a在上面,其PDV值 = pdvb = wa - sb.假设b在上面,其PDV值 = pdva = wb - sa.然后两个值取最小,若a在上面的PDV小,则 wa - sb < wb - sa,即wa + sa < wb + sb.同理,若b在上面的PDV小,则wb

【uva 1615】Highway(算法效率--贪心 区间选点问题)

题意:给定平面上N个点和一个值D,要求在x轴上选出尽量少的点,使得对于给定的每个店,都有一个选出的点离它的欧几里德距离不超过D. 解法:先把问题转换成模型,把对平面的点满足条件的点在x轴的直线上可得到一个个区间,这样就是选最小的点覆盖所有的区间的问题了.我之前的一篇博文有较详细的解释:关于贪心算法的经典问题(算法效率 or 动态规划).代码实现我先空着.挖坑~

【贪心+Treap】BZOJ1691-[Usaco2007 Dec]挑剔的美食家

[题目大意] 有n头奶牛m种牧草,每种牧草有它的价格和鲜嫩度.每头奶牛要求它的牧草的鲜嫩度要不低于一个值,价格也不低于一个值.每种牧草只会被一头牛选择.问最少要多少钱? [思路] 显然的贪心,把奶牛和牧草都按照鲜嫩度由大到小排序,对于每奶牛把鲜嫩度大于它的都扔进treap,然后找出后继. 不过注意后继的概念是大于它且最小的,然而我们这里是可以等于的,所以应该是找cow[i].fresh-1的后继,注意一下…… 1 #include<iostream> 2 #include<cstdio&

POJ1017 Packets(贪心算法训练)

Time Limit: 1000MS          Memory Limit: 10000K          Total Submissions: 51306          Accepted: 17391 Description A factory produces products packed in square packets of the same height h and of the sizes 1*1, 2*2, 3*3, 4*4, 5*5, 6*6. These pro

ZOJ 3946 Highway Project 贪心+最短路

题目链接: http://www.icpc.moe/onlinejudge/showProblem.do?problemCode=3946 题解: 用dijkstra跑单元最短路径,如果对于顶点v,存在一系列边(ui,v)使得dis[v]最小(dis[v]表示0到v的距离).这些边能且只能选一条,那么我们自然应该选cost最小的那个边了. 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #inc

CoderForce 140C-New Year Snowmen(贪心)

题目大意:有n个已知半径的雪球.堆一个雪人需要三个尺寸不同的雪球,问用这些雪球最多能堆多少个雪人? 题目分析:先统计一下每种尺寸的球的个数,从三种最多的种类中各取出一个堆成雪人,这样贪心能保证的到的数目最多. 代码如下: # include<iostream> # include<map> # include<vector> # include<cstdio> # include<queue> # include<algorithm>

计蒜客 跳跃游戏(贪心)

给定一个非负整数数组,假定你的初始位置为数组第一个下标.数组中的每个元素代表你在那个位置能够跳跃的最大长度. 请确认你是否能够跳跃到数组的最后一个下标. 例如: A = [2,3,1,1,4], return ture A = [3,2,1,0,4], return false. 格式: 第一行输入一个正整数n,接下来的一行,输入数组A[n].如果能跳到最后一个下标,输出"true",否则输出"false" 样例1 ????输入:???? ????????5 ???

BZOJ 2525 [Poi2011]Dynamite 二分+树形贪心

题意: n个点,一棵树,有些点是关键点,可以将m个点染色. 求所有关键点到最近的被染色点的距离的最大值最小. 解析: 反正从这道题我是学了一种做题思路? 大爷讲课的时候说的:一般选择某些点的代价相同的话都是贪心,代价不同的话一般都是DP. 想想也挺对的,不过就是没有感悟到过? 反正这题考试的时候我是直接D了贪心的- -! 忘了为啥D了. 显然最大值最小我们需要二分一下这个值. 然后接下来我们从下往上扫整棵树. 节点的状态有几个? 第一种是 子树内没有不被覆盖的关键点,并且子树中有一个节点的贡献可

CF 500 C. New Year Book Reading 贪心 简单题

New Year is coming, and Jaehyun decided to read many books during 2015, unlike this year. He has n books numbered by integers from 1 to n. The weight of the i-th (1 ≤ i ≤ n) book is wi. As Jaehyun's house is not large enough to have a bookshelf, he k