uva11729

这个题的题意是

你有n个部下,每个部下需要完成一项任务。第i个部下需要你花Bi分钟交代任务,然后他会立刻独立地、无间断地执行Ji分钟后完成任务。

你需要选择交待任务的顺序,使得所有任务尽早执行完毕(即最后一个执行完的任务应尽早结束)。注意,不能同时给两个部下交待任务,

但部下们可以同时执行他们各自的任务

求完成所有任务的最短时间

实际上呢我们知道这是一个排序的问题。。当然有时候可以转化成其他问题。。

我们先按它是一个排序的问题来搞一下。。

那么每个元素就有两个属性交待的时间a,完成任务的时间b,显然这是一个二维偏序的问题(?)

那么我们考虑第一维有三种情况(等于,大于,小于),第二维也有三种情况。。

由组合数学的乘法原理得。。最后的结果总数是3*3=9

那么我们枚举小数据来看看相邻两个元素怎么放置可以使结果最小,如果这个确定的话那么我们可以冒泡排序

通过交换来维持这个性质,当然这个是要有前提的,那就是要满足最优子结构的性质,也就是说这个问题呢

要满足如果我序列里任何相邻元素都满足上面使结果最小的顺序导致我总体结果也是最小的那么这样的话,

应该是满足最优子结构的性质的,那么我们分析这个问题。。很显然你把它两两相邻考虑

从一个元素开始慢慢往上加。。每加入一个元素我们就调整顺序。。那么这样我们就保证了使每次取max(pre-element,cur-element)

我们每次使这个将要考虑的cur-element最小,那么我们最后取得最大值就会最小。。

那么如果我们用探索法画图画这九种情况来分析规律

我们画了5种。。但是足以看出来。。我们先做执行任务长的,时间会更短

那么我们其实还发现不管什么顺序。。安排任务的时间总和是固定的。。但是结果不同

区别就在于分配任务的前缀和加上哪个执行任务时间对答案的贡献。。那么我们显然可以得到。。执行任务时间最长的应该配

一个较短的分配任务前缀和。。这样可以减小这个最大值对答案的贡献

还有一些地方不太懂。。再做几道类似的题目再说吧

UVA的64位整数是%lld 另外要注意答案输出格式。。不要以为数值对了就能AC。。

贴上AC代码

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; typedef long long ll;
const int maxn=1e3+;
int N;
struct node{
int a,b;
}Node[maxn];
bool cmp(node a,node b){
if(a.b!=b.b) return a.b>b.b;
else return a.a>b.a;
}
int main(){
int cnt=;
while(~scanf("%d",&N)){
if(N==) break;
int i,j;
for(i=;i<N;++i){
scanf("%d%d",&Node[i].a,&Node[i].b);
}
sort(Node,Node+N,cmp);
ll previd1=Node[].a;
ll mx=previd1+Node[].b;
for(i=;i<N;++i){
previd1+=Node[i].a;
mx=max(mx,previd1+Node[i].b);
}
printf("Case %d: %lld\n",++cnt,mx);
}
return ;
}

经典贪心算法uva11729的更多相关文章

  1. [经典贪心算法]Prim算法

    最小生成树的Prim算法也是贪心算法的一大经典应用.Prim算法的特点是时刻维护一棵树,算法不断加边,加的过程始终是一棵树. Prim算法过程: 一条边一条边地加, 维护一棵树. 初始 E = {}空 ...

  2. 经典贪心算法(哈夫曼算法,Dijstra单源最短路径算法,最小费用最大流)

    哈夫曼编码与哈夫曼算法 哈弗曼编码的目的是,如何用更短的bit来编码数据. 通过变长编码压缩编码长度.我们知道普通的编码都是定长的,比如常用的ASCII编码,每个字符都是8个bit.但在很多情况下,数 ...

  3. 关于贪心算法的经典问题(算法效率 or 动态规划)

    如题,贪心算法隶属于提高算法效率的方法,也常与动态规划的思路相挂钩或一同出现.下面介绍几个经典贪心问题.(参考自刘汝佳著<算法竞赛入门经典>).P.S.下文皆是我一个字一个字敲出来的,绝对 ...

  4. 【十大经典数据挖掘算法】AdaBoost

    [十大经典数据挖掘算法]系列 C4.5 K-Means SVM Apriori EM PageRank AdaBoost kNN Naïve Bayes CART 1. 集成学习 集成学习(ensem ...

  5. 贪心算法(Greedy Algorithm)之最小生成树 克鲁斯卡尔算法(Kruskal&#39;s algorithm)

    克鲁斯卡尔算法(Kruskal's algorithm)是两个经典的最小生成树算法的较为简单理解的一个.这里面充分体现了贪心算法的精髓.大致的流程能够用一个图来表示.这里的图的选择借用了Wikiped ...

  6. js算法初窥05(算法模式02-动态规划与贪心算法)

    在前面的文章中(js算法初窥02(排序算法02-归并.快速以及堆排)我们学习了如何用分治法来实现归并排序,那么动态规划跟分治法有点类似,但是分治法是把问题分解成互相独立的子问题,最后组合它们的结果,而 ...

  7. Java 算法(一)贪心算法

    Java 算法(一)贪心算法 数据结构与算法目录(https://www.cnblogs.com/binarylei/p/10115867.html) 一.贪心算法 什么是贪心算法?是指在对问题进行求 ...

  8. 【BZOJ】1828: [Usaco2010 Mar]balloc 农场分配(经典贪心)

    [算法]贪心+线段树 [题意]给定n个数字ci,m个区间[a,b](1<=a,b<=10^5),每个位置最多被ci个区间覆盖,求最多选择多少区间. 附加退化问题:全部ci=1,即求最多的不 ...

  9. hdoj2037 贪心算法——今年暑假不AC

    所谓“贪心算法”是指:在对问题求解时,总是作出在当前看来是最好的选择.也就是说,不从整体上加以考虑,它所作出的仅仅是在某种意义上的局部最优解(是否是全局最优,需要证明). 经典问题:时间序列问题   ...

随机推荐

  1. C++ 中超类化和子类化

    超类化和子类化没有具体的代码,其实是一种编程技巧,在MFC和WTL中可以有不同的实现方法. 窗口子类化: 原理就是改变一个已创建窗口类的窗口过程函数.通过截获已创建窗口的消息,从而实现监视或修改已创建 ...

  2. 100m和1000m网线的常见制作方法

    100m和1000m网线的常见制作方法 100m和1000m网线的常见制作方法: 5类线(100m)的制作: a: 绿白(3).绿(6).橙白(1).蓝(4).蓝白(5).橙(2).棕白(7).棕(8 ...

  3. 使用Servlet和jdbc创建用户登录验证

    首先创建一个用户表,用来保存用户名 密码,并插入几条数据 mysql> desc user;+----------+-------------+------+-----+---------+-- ...

  4. 12. javacript高级程序设计-DOM2和DOM3

    1. DOM2和DOM3 DOM2级规范定义了一些模块,用于增强DOM1级.“DOM2级核心”为不同的DOM类型引入了一些与XML命名空间有关的方法,这些变化只在使用XML或者XHTML,对于HTML ...

  5. Java for LeetCode 211 Add and Search Word - Data structure design

    Design a data structure that supports the following two operations: void addWord(word)bool search(wo ...

  6. Effective C++ -----条款40:明智而审慎地使用多重继承

    多重继承比单一继承复杂.它可能导致新的歧义性,以及对virtual继承的需要. virtual继承会增加大小.速度.初始化(及赋值)复杂度等等成本.如果virtual base classes不带任何 ...

  7. 2078 Problem H Secret Message 中石油-未提交-->已提交

    题目描述 Jack and Jill developed a special encryption method, so they can enjoy conversations without wo ...

  8. 【leetcode】Single Number II (medium) ★ 自己没做出来....

    Given an array of integers, every element appears three times except for one. Find that single one. ...

  9. java获取手机号归属地

    import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import ...

  10. IOS - 键盘处理

    iOS 发布了很多关于屏幕上键盘的通知.下面列出了这些通知的简要解释: UIKeyboardWillShowNotification 当键盘即将要显示的时候将会发出这个通知.这个通知包含了用户信息库, ...