动态规划之独立任务最优调度问题代码

本文介绍了一个简单的任务调度算法实现过程,通过用户输入不同任务在两个机器上的执行时间,利用三维动态规划来寻找使得最长完成时间最短的任务分配方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include "iostream.h"
#include "stdio.h"
int worknum;
int a_workarrays[999];
int b_workarrays[999];
int passmax=0;
int workmax;
int opt;


void main()
{
 cout<<"please putnum your worknum \n";
 cin>>worknum;
 for (int p=1; p<=worknum;p++)
 {
  cout<<"please putnum your "<<p<<" work in machineNo1 need time \n";
  cin>>a_workarrays[p-1];
  if (a_workarrays[p-1]>passmax)
  {
   passmax=a_workarrays[p-1];
  }
  cout<<"please putnum your "<<p<<" work in machineNo2 need time \n";
  cin>>b_workarrays[p-1];
  if (b_workarrays[p-1]>passmax)
  {
   passmax=b_workarrays[p-1];
  }
 }
 //cout<<passmax<<"\n";
 workmax=passmax*worknum;

 //三维数组
 int d1 = workmax+1, d2 = workmax+1, d3 = worknum+1;
 int ***q = new int**[d1];
 for(int i = 0; i < d1; i++)
 {
  q[i] = new int*[d2];
  for(int j = 0; j < d2; j++)
  {
   q[i][j] = new int [d3];
   q[i][j][0]= 1;
   for(int k = 1; k < d3; k++)
   {
    q[i][j][k] = 0;
   }
  }
 }

 for(int k=1;k<=worknum;k++)
 {
  for(i=0;i<=workmax;i++)
  {
   for(int j=0;j<=workmax;j++)
   {
    if(i-a_workarrays[k-1]>=0)
    q[i][j][k]=q[i-a_workarrays[k-1]][j][k-1];
    if(j-b_workarrays[k-1]>=0)
    q[i][j][k]=(q[i][j][k]||q[i][j-b_workarrays[k-1]][k-1]);
   }
  }
 }
   
 for(i=0,opt=workmax;i<=workmax;i++)
 {
  for(int j=0;j<=workmax;j++)
  {
   if(q[i][j][worknum])
   {
    int tmp=(i>j)?i:j;
    if(tmp<opt)
    opt=tmp;
   }
  }
 }
 
 cout<<opt<<"\n";
 
}

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值