有一台机器,上面有m个储存空间。然后有n个请求,第i个请求计算时需要占 R[i]个空间,储存计算结果则需要占据O[i]个空间(据O[i]个空间(其中O[i]<R[i])。问怎么安排这n个请求的顺序,使
2017-01-13 20:07
302 查看
有一台机器,上面有m个储存空间。然后有n个请求,第i个请求计算时需要占 R[i]个空间,储存计算结果则需要占据O[i]个空间(据O[i]个空间(其中O[i]<R[i])。问怎么安排这n个请求的顺序,使得所有请求都能完成。你的算法也应该能够判断出无论如何都不能处理完的情况。
比方说,m=14,n=2,R[1]=10,O[1]=5,R[2]=8,O[2]=6。在这个例子中,我们可以先运行第一个任务,剩余9个单位的空间足够执行第二个任务;但如果先走第二个任务,第一个任务执行时空间就不够了,因为10>14-6。
比方说,m=14,n=2,R[1]=10,O[1]=5,R[2]=8,O[2]=6。在这个例子中,我们可以先运行第一个任务,剩余9个单位的空间足够执行第二个任务;但如果先走第二个任务,第一个任务执行时空间就不够了,因为10>14-6。
//请求数 #define N 2 //存储空间 #define M 14 typedef struct request { int no; int r; int o; } REQ; void printReqs(REQ* reqs, int len) { for (int i = 0; i < len - 1; ++i) { cout << reqs[i].no << "->"; } cout << reqs[len - 1].no << endl; } int cmp(const void* req1, const void* req2) { return (((const REQ*) req2)->r - ((const REQ*) req2)->o) - (((const REQ*) req1)->r - ((const REQ*) req1)->o); } //获取处理完所有请求所需的存储空间 int getAllOccupy(REQ* reqs, int len) { int sum = 0; for (int i = 0; i < len; ++i) { sum += reqs[i].o; } return sum; } bool arrangeDealRequest(REQ* reqs, int len) { if (!reqs || !len) { return false; } int occupy = getAllOccupy(reqs, len); //必定不满足的情况: 处理完所有请求后所需空间小于指定空间 if (M < occupy) { cout << "存储空间不足!!!"; return false; } else { int curSpace = M; //按照R[i]-O[i]的值降序排序 qsort(reqs, len, sizeof(REQ), cmp); for (int i = 0; i < len; ++i) { if (curSpace >= reqs[i].r) { curSpace -= reqs[i].o; } else { cout << "运行空间不足!!!"; return false; } } return true; } }
相关文章推荐
- 有一台机器,上面有m个储存空间。然后有n个请求,第i个请求计算时需要占 R[i]个空间,储存计算结果则需要占据O[i]个空间(据O[i]个空间(其中O[i]<R[i])。问怎么安排这n个请求的顺序,使
- 执行任务处理(有一台机器,上面有m个储存空间。然后有n个请求,第i个请求计算时需要占 R[i]个空间,储存计算结果则需要占据O[i]个空间)
- 170 一台机器,计算占R[i]个空间,储存结果则占据O[i]个空间
- 第八题:牛牛的作业薄上有一个长度为 n 的排列 A,这个排列包含了从1到n的n个数,但是因为一些原因,其中有一些位置(不超过 10 个)看不清了,但是牛牛记得这个数列顺序对的数量是 k,顺序对是指满足 i < j 且 A[i] < A[j] 的对数,请帮助牛牛计算出,符合这个要求的合法排列的数目。
- 怎么去证明自己的思想是否正确:按照思想的指引去做事,然后根据结果来判定。
- 从一台机器上的客户端怎么连接到另一台机器的服务器
- 在写JSP时,导入了一次sql2005直连包,但是换一台机器就有错误,怎么解决?
- 精确计算1!+2!+3!+···+n!,其中0<n<50
- sql2000和sql2005装在同一台机器上是需要加实例名
- cpanel空间的流量是怎么计算的?(www.idcvendor.com)
- QPS、PV和需要部署机器数量计算公式(转)
- C++类及其实例所占据空间(自己测试结果)
- Problem Description 青年歌手大奖赛中,评委会给参赛选手打分。选手得分规则为去掉一个最高分和一个最低分,然后计算平均得分,请编程输出某选手的得分。 Input 输入数据有多组,每组占一行,每行的第一个数是n(2<n<=100),表示评委的人数,然后是n个评委的打分。 O
- GEF常见问题7:计算字符串在画布上占据的空间
- QPS、PV和需要部署机器数量计算公式
- struts命名空间(basePath)(前两行<%%>不要删)(struts.xml修改以后需要重启服务器)
- 输入读入一个String 序列,计算元音字母的个数,然后再顺序输出--C++
- 合理安排计算顺序避免溢出
- TaskVision 需要引用 Excel.dll .在我的机器上找不到Excel.dll,怎么办?
- 用Image做为容器,上面放一个图片,然后还要在图片上绘制一个点,我该怎么去做呢?