经典贪心算法uva11729
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的更多相关文章
- [经典贪心算法]Prim算法
最小生成树的Prim算法也是贪心算法的一大经典应用.Prim算法的特点是时刻维护一棵树,算法不断加边,加的过程始终是一棵树. Prim算法过程: 一条边一条边地加, 维护一棵树. 初始 E = {}空 ...
- 经典贪心算法(哈夫曼算法,Dijstra单源最短路径算法,最小费用最大流)
哈夫曼编码与哈夫曼算法 哈弗曼编码的目的是,如何用更短的bit来编码数据. 通过变长编码压缩编码长度.我们知道普通的编码都是定长的,比如常用的ASCII编码,每个字符都是8个bit.但在很多情况下,数 ...
- 关于贪心算法的经典问题(算法效率 or 动态规划)
如题,贪心算法隶属于提高算法效率的方法,也常与动态规划的思路相挂钩或一同出现.下面介绍几个经典贪心问题.(参考自刘汝佳著<算法竞赛入门经典>).P.S.下文皆是我一个字一个字敲出来的,绝对 ...
- 【十大经典数据挖掘算法】AdaBoost
[十大经典数据挖掘算法]系列 C4.5 K-Means SVM Apriori EM PageRank AdaBoost kNN Naïve Bayes CART 1. 集成学习 集成学习(ensem ...
- 贪心算法(Greedy Algorithm)之最小生成树 克鲁斯卡尔算法(Kruskal's algorithm)
克鲁斯卡尔算法(Kruskal's algorithm)是两个经典的最小生成树算法的较为简单理解的一个.这里面充分体现了贪心算法的精髓.大致的流程能够用一个图来表示.这里的图的选择借用了Wikiped ...
- js算法初窥05(算法模式02-动态规划与贪心算法)
在前面的文章中(js算法初窥02(排序算法02-归并.快速以及堆排)我们学习了如何用分治法来实现归并排序,那么动态规划跟分治法有点类似,但是分治法是把问题分解成互相独立的子问题,最后组合它们的结果,而 ...
- Java 算法(一)贪心算法
Java 算法(一)贪心算法 数据结构与算法目录(https://www.cnblogs.com/binarylei/p/10115867.html) 一.贪心算法 什么是贪心算法?是指在对问题进行求 ...
- 【BZOJ】1828: [Usaco2010 Mar]balloc 农场分配(经典贪心)
[算法]贪心+线段树 [题意]给定n个数字ci,m个区间[a,b](1<=a,b<=10^5),每个位置最多被ci个区间覆盖,求最多选择多少区间. 附加退化问题:全部ci=1,即求最多的不 ...
- hdoj2037 贪心算法——今年暑假不AC
所谓“贪心算法”是指:在对问题求解时,总是作出在当前看来是最好的选择.也就是说,不从整体上加以考虑,它所作出的仅仅是在某种意义上的局部最优解(是否是全局最优,需要证明). 经典问题:时间序列问题 ...
随机推荐
- 5.js模式-职责链模式
1. 职责链模式 将对象连成一条链,并沿着这条链传递请求,直到有一个对象处理它为止. var chain = function(fn){ this.fn = fn; this.successor = ...
- 关于新中新二代身份证读卡器DKQ-A16D的一些问题
今天拿到了新中新DKQ-A16D,随机光盘里有以下文件: 我遇到的问题是,如果直接打开\二代征SDK开发包\DLL\测试程序\C#_2008\WindowsFormsApplication1\目录下的 ...
- 没有body怎么添加onload事件
<script type="text/javascript"> window.onload = function () { setup(); } </script ...
- 【剑指offer】题目36 数组中的逆序对
数组中任取两个数字,如果前面的数字大于后面的数字称为一个逆序对 如:1,2,1,2,1 有3个逆序对 思路:知道O(N2)肯定是错的.开始想hash,试图找到O(n)的算法,想了很久,找不到.后来想到 ...
- 【xml】转义字符 <等符号出现的原因
来源:http://www.cnblogs.com/hyd309/p/3549076.html HTML中的转义字符 HTML中<, >,&等有特别含义,(前两个字符用于链接签, ...
- Div内部的内容超出部分显示省略号(仅仅只有一行内容)
效果如下:
- 核心动画基础动画(CABasicAnimation)关键帧动画
1.在iOS中核心动画分为几类: 基础动画(CABasicAnimation) 关键帧动画(CAKeyframeAnimation) 动画组(CAAnimationGroup) 转场动画(CATran ...
- SEH-关于捕获memcpy的异常
网上有说memcpy是C语言写的,没有异常处理机制. 但是貌似SEH可以处理. SEH("Structured Exception Handling"),即结构化异常处理·是(wi ...
- 网站上点击自定义按钮发起QQ聊天的解决方案
一.背景 最近由于开发需要,需要在网站上自定义一个立即交谈的按钮,现将解决方式分享给大家. 二.解决方案 1.首先访问:http://shang.qq.com/widget/consult.php,适 ...
- DB2 SQL Mixed data in character strings
Mixed character data and graphic data are always allowed for Unicode, but for EBCDIC and ASCII, the ...