双机工作,独立条件最优解
来源:互联网 发布:淘宝排名软件 编辑:程序博客网 时间:2024/05/21 07:59
0010:双机工作问题(难度2,动态规划或剪枝搜索)
- 查看
- 提交
- 统计
- 提问
- 总时间限制:
- 10000ms
- 单个测试点时间限制:
- 1000ms
- 内存限制:
- 10000kB
- 描述
用2台处理机A和B处理n个作业。设第i个作业交给机器A处理时需要时间ai,若由机器B来处理,则需要时间bi。每件作业在a,b机上处理时间不同,两台机可同时工作,作业处理顺序严格按照作业序号进行(例:如果2号任务尚未开始加工,3号任务也不能进行加工),欲求加工n个任务所需最小时间。
- 输入
- 文件的第1行是1个正整数n, 表示要处理n个作业。接下来的2行中,每行有n个正整数,分别表示处理机A和B处理第i个作业需要的处理时间。
- 输出
- 最短完成作业时间
- 样例输入
6 2 5 7 10 5 23 8 4 11 3 4
- 样例输出
15
独立任务最优解法 重下向上
设完成K个任务A需要的时间为x;
如果知道k-1任务的最优时间,就能确定k任务 是由A 来完成 还是B 来完成
当前任务由A完成: F[x+A[k]][k]=F[x][k-1];
当前任务由B完成: ①F[x][k]=F[x][k-1]+B[k];
变化 A式得: ②F[x][k]=F[x-A[k]][k-1];
列子:当N=2时 A={2,5} ,B={3,8} 其最优时间 明显是5,所以难点是分配任务;
做一个任务,只能是A或B必须花费任务所需的时间。
1.一个任务,当 0<y<A[1] 时 因为 y没到A[1] 所以说明A没做完,即
在F[0<=y<A[1]][k]的值就为B[1];
2.多个任务,(x是A总时间) 当(0<y<A[k])时因为A没做完,B[y][k]还得自己完成当前任务;
当y==A[k]时就要判断当前是由A或B完成 去MIN(①,②)
当A[k]<y<=x 时 只要y=任意A任务相加就表明A完成了多少任务,就要做MIN(①,②)
表明剩下任务由B做好还是A做好;#include "iostream"#include "string.h"using namespace std;#define Max 20#define Sky 9999999#define MAX(a,b) ( a > b ? a : b )#define MIN(a,b) (a<b?a:b)int N;int A[Max],B[Max];int F[Max][Max];int main(){ freopen("1.txt","r",stdin);cin>>N;int i,x; for(i=1;i<=N;i++){cin>>A[i];}for(i=1;i<=N;i++){cin>>B[i];} memset(F,0,sizeof(F));int SumA=0;for(int k=1;k<=N;k++){SumA+=A[k]; //记录A的时间for(x=0;x<=SumA;x++) {F[x][k]=F[x][k-1]+B[k]; //当前任务由B完成 可看上面公式if(x>=A[k]) //如果B完成任务的时间大于当前A[k]时,就要取最优B时间{ F[x][k]=MIN(F[x][k],F[x-A[k]][k-1]);}}} int End=Sky;for(i=1;i<=SumA;i++){ End=MIN(End,MAX(i,F[i][N]));//取所有最大完成时间中最小的} cout<<End<<endl;return 0;}
省内存的代码:#include "iostream"#include "string.h"using namespace std;#define Max 5000000#define Sky 9999999#define MAX(a,b) ( a > b ? a : b )#define MIN(a,b) (a<b?a:b)int N;int A[Max] ,B[Max] ;int F[Max] ;int main(){ //freopen("1.txt","r",stdin);cin>>N; int Sum=0;int i,x; for(i=1;i<=N;i++){cin>>A[i];Sum+=A[i];} for(i=1;i<=N;i++){cin>>B[i];F[i]=0;}int SumA=0;for(int k=1;k<=N;k++){ SumA+=A[k];for(x=SumA;x>=0;x--){ F[x]=F[x]+B[k]; if(x>=A[k]) { F[x]=MIN(F[x],F[x-A[k]]); }}} int End=Sky;for(i=1;i<=Sum;i++){End=MIN(End,MAX(i,F[i]));} cout<<End<<endl;return 0;}
1 0
- 双机工作,独立条件最优解
- 独立任务最优调度(双机调度)问题
- 【编程素质】算法-独立任务最优调度问题(双机调度问题)
- 条件独立
- 条件独立
- 条件独立
- 独立与条件独立
- 独立和条件独立
- 独立任务最优调度
- 独立任务最优调度
- 独立任务最优调度
- 独立任务最优调度
- 最优性条件
- 独立任务最优调度问题
- 独立任务最优调度问题
- 独立任务最优调度问题
- 独立任务最优调度问题
- 独立任务最优调度问题
- 笔记整理之BCP
- BCP笔记整理(二)
- Golang测试技术
- “独角兽”初长成,喱喱学车引领互联网学车新模式
- HotSpot算法实现
- 双机工作,独立条件最优解
- mediawiki 导入导出Excel文件
- I/O 重定向
- STM32的时钟系统RCC详细整理
- Android成长之路(7)——关于隐式Intent的用法
- 热补丁方案研究
- 隐马尔可夫模型(HMM) - 2 - 概率计算方法
- 便携名片app
- Netty 实现聊天功能