达到最高效益的调度
2012-11-03 09:58
302 查看
View Code
#include<IOSTREAM.H> #include <IOMANIP.H> #include <STRING.H> #include <STDLIB.H> #include <stdio.h> /************************************************************************/ /* 问题: 假设有一台机器,以及在此机器上处理的n个作业a1,a2,...an的集合。每隔作业aj有一个处理时间tj,效益pj, 以及最后期限dj。机器在一个时刻只能处理一个作业,而且作业aj必须在tj连续时间单位内不间断地运行。 如果作业aj在最后期限dj之前完成,则获得效益pj, 但如果在最后期限之后才完成,则没有效益。请给出一个动态规划算法,来寻找能获得最大量效益的调度, 假设所有的处理时间都是1到n之间的整数。 分析: 其实这个问题类似于01背包问题。 1. 将a1,a2,…,an按照dj值排序,从小到大。假设接下来的分析中,已经保证当i<j时,di<dj。添加d0=0。 2. 构建数组s [d ],s[i][j]代表在j时间内,调度i个作业,所得最高效益值。 初始时,令s[i][0] = 0(i = 0->n),s[0][j] = 0(j = 0->d )。 3. 求s[i][j]的值,select[i][j]用于记录是否选择i。 这里递归包含了一种思想:如果第i个作业被调度,那么最好使其在期限时正好结束, 这样能够保证i之前的作业能够在更充裕的时间内被调度。 */ /************************************************************************/ int min(int a,int b) { return a<b?a:b; } void main() { int N=5; int d[7]={0,2,3,4,5,7,8}; int T[7]={0,2,1,2,1,3,5}; int V[7]={0,4,2,3,3,3,14}; int array[7][9]; for (int i=0;i<7;i++) { array[i][0]=0; } for(int j=0;j<9;j++) array[0][j]=0; for (i=1;i<7;i++) { for (j=1;j<=d[i];j++) { int temp1=array[i-1][min(j,d[i-1])]; int temp2=0; if(j-T[i]>=0) temp2=array[i-1][min(j-T[i],d[i-1])]+V[i]; array[i][j]=temp1>=temp2?temp1:temp2; } } cout<<array[6][8]<<endl; }
相关文章推荐
- 算法导论-15-7-达到最高效益的调度
- 算法导论-15-7-达到最高效益的调度
- 算法导论-15-7 达到最高效益的调度
- 达到最高效益的调度
- 动态规划--达到最高效益的调度
- 算法导论---达到最大效益的调度
- 算法导论15 dp 最高效益调度
- 程序员怎样才能达到编程的最高境界
- 多人连接打印机提示达到最高值出错的解决方法
- 让 PHP7 达到最高性能的几个建议
- 移形幻影,把不同的两个文件,合成一个文件,以达到掩饰最高境界!哈哈,好文章!!!
- 让PHP7达到最高性能的几个Tips
- 单表查询如何建立索引让你的查询语句性能达到最高
- 04 Dec 15 让PHP7达到最高性能的几个Tips
- 【Codeforces Beta Round 2A】【模拟 map 有map的java实现哦】Winner 第一个达到最终最高分的人名
- 热电转换效率最高元件,转换效率达到17%,为世界之最
- 微软Vista今起大幅降价 最高幅度达到千元
- 让PHP7达到最高性能的几个建议
- [置顶] Java模拟最短作业优先、时间片轮转、最高响应比三种进程调度算法
- MT6580电池电压ADC完全不对,最高达到4.7V