独立任务最优调度问题
2015-11-17 22:28
441 查看
#include "iostream" #include "algorithm" #include "fstream" using namespace std; bool ***p; int *a; int *b; //返回数组a[1,n]中的最大值 int maxV(int a[], int n) { int mx = a[1]; for(int i=2; i<=n; i++) if(a[i] > mx) mx = a[i]; return mx; } int max(int a, int b) { return a > b ? a : b; } /* p(i, j, k)表示前k个任务在a处理机不超过时间i,在b处理机不超过时间j内完成 p(i, j, k) = p(i-ak, j, k-1) || p(i, j-bk, k-1) 前提是i>=ak, j>=bk p(i, j, 0) = 1 最短处理时间为 min{max{i, j}} */ //n为任务个数,mn为完成n个任务最长时间 int task(int n, int mn) { for(int i=0; i<=mn; i++) for(int j=0; j<=mn; j++) { p[i][j][0] = true; for(int k=1; k<=n; k++) p[i][j][k] = false; } for(int k=1; k<=n; k++) for(i=0; i<=mn; i++) for(int j=0; j<=mn; j++) { if(i>=a[k]) p[i][j][k] = p[i-a[k]][j][k-1]; if(j>=b[k]) p[i][j][k] = (p[i][j][k] || p[i][j-b[k]][k-1]); } int opt = mn; int temp; for(i=0; i<=mn; i++) for(int j=0; j<=mn; j++) if(p[i][j] ) { temp = max(i, j); if(temp < opt) opt = temp; } return opt; } int main() { ifstream fin("task.txt"); int n; fin >> n; cout << "作业个数为:" << n; a = new int[n+1]; b = new int[n+1]; cout << "\n各作业在机器a上的处理时间为:\n"; for(int i=1; i<=n; i++) { fin >> a[i]; cout << a[i] << " "; } cout << "\n各作业在机器b上的处理时间为:\n"; for(int j=1; j<=n; j++) { fin >> b[j]; cout << b[j] << " "; } int max1 = maxV(a, n); int max2 = maxV(b, n); int mx = max(max1, max2); //单个作业完成任务所需时间最大值 int mn = mx * n; //所有任务完成时间上限 //数组p申请空间 p = new bool**[mn+1]; for(i=0; i<=mn; i++) p[i] = new bool*[mn+1]; for(i=0; i<=mn; i++) for(j=0; j<=mn; j++) p[i][j] = new bool[n+1]; cout <<"\n最短处理时间为:" << task(n, mn) << endl; //释放空间 delete []a; delete []b; for(i=0; i<=mn; i++) for(j=0; j<=n; j++) delete []p[i][j]; for(i=0; i<=mn; i++) delete []p[i]; delete []p; fin.close(); return 0; }
相关文章推荐
- iOS category内部实现原理
- 十进制转换为二进制
- Ubuntu下使用Tasksel安装LAMP
- 反射
- ReentrantLock和synchronized的区别
- QString 和 TCHAR 的相互转换
- Android设计模式-----依赖注入
- Cocos2dx-OpenGL ES2.0教程:编写自己的shader(2)
- 关于python 科学计算库的下载
- 机器学习分类算法应该如何选择?
- 内部类(转)
- (转载)Cocos2dx-OpenGL ES2.0教程:编写自己的shader(2)
- UI基础__ NSMutableAttributedString
- java 解析properties文件的两种方法
- chrome调试webview
- DOS之创建项目之目录架构
- LeetCode Kth Largest Element in an Array (快速排序)
- slack机器人运维
- 对java servlet 单例模式的理解
- 【南大软院大神养成计划】html+css之css