poj3045(简单贪心,根据多个权重排序类型的总结)
2016-11-03 20:37
218 查看
/* translation: n头牛要叠罗汉,每头牛有两个属性,力量和重量。每头牛要支撑其上面所有牛的风险是上面所有牛的重量减去这头牛 本身的力量。求一种排列顺序使得最大的风险最少 solution: 贪心即可。重量越大力量越大的牛应该在最低下。 note: # 一开始以为二分,其实用不着二分 *:对于涉及到需要预先对物品进行排序的算法(特别是贪心之类),经常遇到同一个物品拥有两个属性的情况。常用到的方法有: 1.优先按照某一属性排列,适用于优先考虑某一种属性的情况。 2.按照两个属性之比排列,适用于两个属性随着排列一个递增一个递减的情况 3.按照两个元素之和排列,使用于两个属性随着排列都递增的情况。 date: 2016.11.3 */ #include <iostream> #include <cstdio> #include <algorithm> using namespace std; const int maxn = 50000 + 10; const int INF = 500000000 + 10; struct Cow { int weight, strength; } c[maxn]; int n, total_w; bool cmp(const Cow& a, const Cow& b) { return a.weight + a.strength > b.weight + b.strength; } int main() { while(~scanf("%d", &n)){ total_w = 0; for(int i = 0; i < n; i++) scanf("%d%d", &c[i].weight, &c[i].strength), total_w += c[i].weight; sort(c, c + n, cmp); int ans = -INF; for(int i = 0; i < n; i++){ //排在前面的牛处在底层 total_w -= c[i].weight; ans = max(ans, total_w - c[i].strength); } printf("%d\n", ans); } return 0; }
相关文章推荐
- boost 中的模板多参数根据N来提取第N个参数的类型 (tuple的实现中用到) tuple的自己的简单实现,仅带get方法
- C/C++ %d等简单格式类型总结
- 根据权重随机选取指定条数记录的简单算法实现
- 冒泡,插入,折半插入,希尔,快速,简单选择排序源码总结
- DedeCMS列表页内容根据权重排序dede_arctiny 按weight排序
- 简单的排序+贪心 pku 1089_Intervals
- 根据权重挑选通道的简单算法
- 对<String,Double>类型的Map根据Value数值由大到小排序
- 冒泡排序,插入排序,快速排序 简单总结
- c语言一些简单排序总结
- 【线段上】简单贪心总结……未完
- 程序员面试宝典之数据结构基础----排序之快速排序(简单快速排序与改进快速排序)总结
- Dataview根据数字(字符串类型)排序Sort
- 8种排序的简单总结
- C语言整数类型及printf格式化输出问题总结复习及进制转换的简单实现
- 简单排序总结:选择、插入、交换
- 冒泡,插入,折半插入,希尔,快速,简单选择排序的源代码总结
- map类型的取值和排序总结
- 对数组中的自定义的类型根据姓名,年龄排序(升序, 降序)sortedArrayUsingSelector
- 简单平方阶排序总结