题目链接

题目描述

用2 台处理机A 和B 处理n 个作业。设第i 个作业交给机器A 处理时需要时间i a ,若由机器B 来处理,则需要时间i b 。由于各作业的特点和机器的性能关系,很可能对于某些i,有ai >=bi,而对于某些j,j≠i,有aj < bj 。既不能将一个作业分开由2 台机器处理,也没有一台机器能同时处理2 个作业。设计一个动态规划算法,使得这2 台机器处理完这n个作业的时间最短(从任何一台机器开工到最后一台机器停工的总时间)。研究一个实例: (a1,a2,a3,a4,a5,a6)=(2,5,7,10,5,2);(b1,b2,b3,b4,b5,b6)=(3,8,4,11,3,4)。 对于给定的2 台处理机A 和B处理n 个作业,找出一个最优调度方案,使2台机器处理完这n 个作业的时间最短。

输入

的第1行是1个正整数n<=200, 表示要处理n个作业。 接下来的2行中,每行有n 个正整数,分别表示处理机A 和B 处理第i 个作业需要的处理时间。

输出

最短处理时间

样例输入

复制
6
2 5 7 10 5 2
3 8 4 11 3 4

样例输出

15

题解:
这道题是说有N个作业可以在两个机器A,B上操作,同一个作业在A,B上不能同时进行,并且在A,B上的操作时间不同,所以我们要考虑从1~n个作业,哪些在A上,哪些在B上操作,所需要的时间最短。
用动态规划的思想,我们做这样的思考:当操作第i个作业时,我们选A还是B机器?在题目的要求下,我们就需要根据i-1的操作和i操作之间的关联来解题了。 先定义变量:a[i]-操作i在机器A上的时间
b[i]-操作i在机器B上的时间
f[i][j]操作到第i个作业时,在A机器已经花费j时间的情况下,找到b机器操作的时间 这道题可以这样来做:当我们全部选A操作的时候,时间上限为a[i]的和,即suma,所以作业从1~n在A上操作的时间都不会超过suma。
我们就可以在A机器操作时间0<=j<=suma的范围内,操做到第i个操作时,在B机器上所花的最短时间。
最短时间:1.当a[i] >j时,f[i][j]=f[i-1][j]+b[i];即在操作到i作业时,A机器所花费的时间大于j,所以不能再A机器上操作了,所以这时应该选择B机器,就要找在操作到i-1作业时,
A机器已经花费j时间的情况下,B机器已经操作的时间f[i-1][j],然后在i操作时选了B,就是f[i-1][j]+b[i]了。
2.当a[i]<=j时,f[i][j]=min(f[i-1][j-a[i]],f[i-1][j]+b[i]);,可能选A机器,可能选B机器,如果选A机器,接要找在操作到i-1作业,A已经花费的时间为j-a[i]时B机器的时间f[i-1][j-a[i]],因为没选B,所以这时候f[i][j]的时间与f[i-1][j-a[i]]相等。
当操作到第n个操作时,从A机器操作时间0~suma的情况下,各个B机器操作的最短时间就找出来了。我们要在A机器花费时间0~suma的时间段里,逐一比较A,B机器的时间,会按最长的时间选出A,B机器的代表,
再在这suma个时间代表中选出最小的哪一个作为最短花时间。
代码如下:
#include<bits/stdc++.h>
using namespace std;
#define MAX 201
int a[MAX];//a[i],A机器 处理i作业花费时间
int b[MAX];//b[i],B机器 处理i作业花费时间
int f[MAX][];// f[i][j],在处理i作业时A机器花费j时间的情况下B机器花费的最小时间
int suma=;//如果所有作业全部由A机器处理,最大时间限制
int min(int x,int y)
{
return x<y?x:y;
}
int max(int x,int y)
{
return x>y?x:y;
}
int dealWith(int n)
{ for(int i=;i<=n;i++)
{
for(int j=;j<=suma;j++)
{
if(a[i]<=j)
{
f[i][j]=min(f[i-][j-a[i]],f[i-][j]+b[i]);
}
else
{
f[i][j]=f[i-][j]+b[i];
} } }
int m=;
for(int j=;j<=suma;j++)
{
int t;
t=max(j,f[n][j]);
m=min(m,t); } return m;
}
int main()
{
int n;
scanf("%d",&n);
for(int i=;i<=n;i++)
{
scanf("%d",&a[i]);
suma+=a[i];
}
for(int i=;i<=n;i++)
{
scanf("%d",&b[i]);
}
int m=dealWith(n);
printf("%d\n",m);
return ;
}
 

动态规划——独立任务最优调度(Independent Task Scheduling)的更多相关文章

  1. suseoj 1209: 独立任务最优调度问题(动态规划)

    1209: 独立任务最优调度问题 时间限制: 1 Sec  内存限制: 128 MB提交: 3  解决: 2[提交][状态][讨论版][命题人:liyuansong] 题目描述 用2台处理机A和B处理 ...

  2. LTE:上行调度请求(Scheduling Request,SR) LTE:下行资源分配类型

    http://blog.sina.com.cn/s/blog_927cff010101a7yh.html 上行调度请求(Scheduling Request,SR) 如果UE没有上行数据要传输,eNo ...

  3. 实现运行在独立线程池的调度功能,基于Spring和Annotation

    使用Spring的注解(@Scheduled)声明多个调度的时候,由于其默认实现机制,将导致多个调度方法之间相互干扰(简单理解就是调度不按配置的时间点执行). 为了解决该问题尝试了修改线程池大小,但是 ...

  4. Task Scheduling

    Introduction In the past, developers have generated a Cron entry for each task they need to schedule ...

  5. LeetCode.1029-两城调度(Two City Scheduling)

    这是小川的第383次更新,第412篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第245题(顺位题号是1029).公司计划采访的人数为2N.将第i个人飞往城市A的费用是[ ...

  6. [Swift]LeetCode1029. 两地调度 | Two City Scheduling

    There are 2N people a company is planning to interview. The cost of flying the i-th person to city A ...

  7. RR调度(Round-robin scheduling)简单介绍

    在RR调度策略下,一个线程会一直运行.直到: 自愿放弃控制权 被更高优先级的线程抢占 时间片用完 例如以下图所看到的,A在用完自己的时间片后,将CPU运行权让给线程B.于是A离开Read队列,而B进入 ...

  8. 题解 AT4170 【[ABC103A] Task Scheduling Problem】

    翻译 有 \(3\) 个正整数 \(a\).\(b\).\(c\),请你输出这 \(3\) 个数中的最大值 \(-\) 最小值的差. 分析 求最大值 \(-\) 最小值的差,我们自然可以使用 for ...

  9. SQL Server 2012中Task是如何调度的?

    SQL Server 2012中Task是如何调度的?[原文来自:How It Works: SQL Server 2012 Database Engine Task Scheduling]     ...

随机推荐

  1. 【Zoj 4061】Magic Multiplication

    [链接] 我是链接,点我呀:) [题意] [题解] /* for a[1] from 1~9 1*1=1 2*1=2 3*1=3 1*2=2 2*2=4 3*2=6 1*3=3 2*3=6 3*3=9 ...

  2. HDU 1704 Rank

    Rank Time Limit: 1000ms Memory Limit: 32768KB This problem will be judged on HDU. Original ID: 17046 ...

  3. Hadoop版本:CDH, HDP, MapR

    Hadoop版本:CDH, HDP, MapR 学习了:http://dongxicheng.org/mapreduce-nextgen/hadoop-distribution-selection/ ...

  4. Map 遍历取值及jstl的取值

    Map 遍历取值及jstl的取值 学习了:http://blog.csdn.net/yanjiaye520/article/details/17354239 1.Java map的便利取值 Java代 ...

  5. 6款程序猿不得不爱的bootstrap模板

    bootstrap模板是前端project师们的最爱!假设你还没有開始使用Bootstrap模板,那你可真是有够OUT,这是一个帮助你高速开发的工具.Bootstrap是基于jQuery框架开发的,它 ...

  6. 打破传统天价SAP培训,开创SAP师徒之路,经验丰富的老顾问带徒弟 qq群150104068

    SAP领航社区,开设了一个导师性质的师徒圈子,类似大学导师带研究生,导师给学生安排课题.分配任务.分享资料,让学生自学提高.我们的教学方法是以自学为主.辅导为辅助,在实践中积累经验掌握原理.主要方向A ...

  7. PyCharm 运行工程

  8. 一次SQLSERVER触发器编写感悟

    背景:BOSS须要我写一个工厂採集端到server端的数据同步触发器,数据库採用的是sqlserver2008 需求:将多台採集机的数据同步到server中,假设採集端数据库与server数据库连接失 ...

  9. const指针总结

    const 总结: 假设keywordconst出如今星号左边.表示被指物是常量:即不能通过指针改动变量的值. 假设keywordconst出如今星号右边,表示指针自身是常量:即不能改变指针的指向. ...

  10. Ubuntu安装及ubuntu系统使用菜岛教程

    Ubuntu是一款广受欢迎的开源Linux发行版,和其他Linux操作系统相比,Ubuntu非常易用,和Windows相容性很好,非常适合Windows用户的迁移,在其八年的成长过程中已经获得了两千多 ...