2012年3月14日
摘要: 问题就是2台机器,n件任务,必须先在S1上做,再在S2上做。任务之间先做后做任意。求最早的完工时间。 这是一个经典问题:2台机器的情况下有多项式算法(Johnson算法),3台或以上的机器是NP-hard的。思想就是贪心,时间复杂度是O(nlogn) 。 Johnson算法 (1) 把作业按工序加工时间分成两个子集,第一个集合中在S1上做的时间比在S2上少,其它的作业放到第二个集合。先完成第一个... 阅读全文
posted @ 2012-03-14 18:21 bovine 阅读(1573) 评论(0) 推荐(0) 编辑
摘要: 设每个位置的初始高度是a[i][j],最终可以达到的高度是h[i][j]。首先,对于最外圈的每个位置,a[i][j] = h[i][j]。然后将最外圈每个位置加入优先队列(高度小的元素在对首),取一个位置t出列,遍历t的相邻位置x,如果a[x]<h[t]。那么a[x]能够达到的最大高度就是h[t],否则h[x] = a[x]。按照这种思路bfs即可。注意结构体的初始化。可以利用结构体的构造函数,从而减小代码量。 1: #include <iostream> 2: #include <cstdio> 3: #include <queue> 4: #inc 阅读全文
posted @ 2012-03-14 15:56 bovine 阅读(261) 评论(0) 推荐(0) 编辑
摘要: 1: #include<stdio.h> 2: #include<functional> 3: #include<queue> 4: #include<vector> 5: using namespace std; 6: //定义结构,使用运算符重载,自定义优先级1 7: struct cmp1{ 8: bool operator ()(int &a,i... 阅读全文
posted @ 2012-03-14 14:36 bovine 阅读(828) 评论(0) 推荐(0) 编辑