非单位时间任务安排问题
来源:互联网 发布:怎样学电脑编程 编辑:程序博客网 时间:2024/04/25 15:06
#include <iostream>#include <fstream>#include <algorithm>using namespace std;/*首先将任务按其截止时间非减序排序p(i, d)表示对任务1,2..i,截止时间为d的最小误时惩罚p(i, d) = min{ p(i-1, d)+wi, p(i-1, min{d, di}-ti) }p(1, d) = 0 t1<=dp(1, d) = w1 t1>d*/ const int INF = 100000;const int MAX = 50;int p[MAX][200];struct Task{ int t; //完成任务需要的时间 int d; //截止时间 int w; //误时惩罚 bool operator < (const Task &ta) const { return d < ta.d; }};Task task[MAX];//int greedy(int n){ sort(task, task+n); //按截止时间排序 int d = task[n-1].d; //最大截止时间 int i, j; //for(i=0; i<n; i++) //for(j=0; j<=d; j++) //p[i][j] = INF; for(i=0; i<=d; i++) if(i > task[0].t) p[0][i] = 0; else p[0][i] = task[0].w; for(i=1; i<n; i++) for(j=0; j<=d; j++) { p[i][j] = p[i-1][j] + task[i].w; int jj = task[i].d > j? j : task[i].d; if(jj >= task[i].t && p[i][j]>p[i-1][jj-task[i].t]) p[i][j] = p[i-1][jj-task[i].t]; } return p[n-1][d];}int main(){ ifstream fin("任务安排.txt"); cout << "输入任务数:"; int n; fin >> n; cout << n; cout << "\n输入完成任务需要的时间,截止时间,误时惩罚:\n"; int i; for(i=0; i<n; i++) { fin >> task[i].t >> task[i].d >> task[i].w; cout << task[i].t << " " << task[i].d << " " << task[i].w << endl; } cout << "最小误时惩罚为:" << greedy(n); cout << endl; fin.close(); return 0;}
0 0
- 非单位时间任务安排问题
- 单位时间任务调度
- pm任务安排问题
- 时间安排的问题
- 回溯求任务安排问题
- 任务安排问题—贪心
- BUCT OJ 任务安排问题
- Project使用非标准时间安排任务
- 贪心法解决任务安排问题
- 任务安排问题(贪心法)
- 时间管理----分析工作安排和首要任务
- 时间安排
- 时间安排
- 时间安排
- java web session有效时间单位问题
- 对于有期限任务安排问题 算法(第三题)
- 时间单位
- nyoj14会场安排问题VS hdoj2037今年暑假不AC(贪心之时间安排问题)
- 图形变换之使用坐标变换
- 判断两多项式之积是否等于另一多项式
- WordPress主题制作入门(3)-后台制作
- NYOJ--975--关于521
- sed
- 非单位时间任务安排问题
- 我看Java虚拟机(1)---Java简介(标配)和Java内存管理概述(空间)
- String类的常用方法
- 利用遍历思想求解图问题(输出所有路径)
- ORACLE数据库文件迁移
- java实现单链表反转(递归方式)
- 电子书,工具集--windows
- 杂谈:软件开发过程中,客户在想些什么
- 如何在虚拟机中安装winXP