#include<bits/stdc++.h>
#define n 6
#define suma 31
#define maxtime 10000
using namespace std;
int a[n+1] = {-1,2,5,7,10,5,2};
int b[n+1] = {-1,3,8,4,11,3,4};
int f[n+1][suma+1];
int min(int a,int b){
if(a<b) return a;
return b;
}
int max(int a,int b){
if(a>b)return a;
return b;
}
void Init(){
for(int i=1;i<=n;i++)
for(int j=0;j<=suma;j++)
f[i][j] = maxtime;
}
void Task_schedule(){
//初始化
int jmax;
jmax = a[1];
for(int j=0;j<jmax;j++)
f[1][j] = b[1];
for(int j=jmax;j<=suma;j++)
f[1][j] = 0;
//构造剩余的f[i][j]矩阵
for(int k=2;k<=n;k++){
jmax = a[k];
//当此时a机器的运行时间不足以加工第k工件时,k工件只能由b机器加工
for(int j=0;j<jmax;j++){
f[k][j] = f[k-1][j] + b[k];//第k工件由b机器加工
}
//当a机器的运行时间可以加工第k工件时,f[k][j]为两种情况中较小的那个值
for(int j=jmax;j<=suma;j++){
f[k][j] = min(f[k-1][j]+b[k],f[k-1][j-a[k]]);/*第k工件由b机器加工*/ /*第k工件由a加工*/
}
}
}
void Print(){
cout<<"finish time matrix"<<endl;
for(int i=1;i<=n;i++){
int min_ = maxtime;
for(int j=0;j<=suma;j++){
if(max(f[i][j],j)<min_) min_ = max(f[i][j],j);
cout<<setw(3)<<setiosflags(ios::left)<<max(f[i][j],j);/*取a,b机器运行时间较大值*/
}
cout<<endl;
cout<<"finish "<<i<<" mintime = "<<min_;
cout<<endl;
}
}
int main(){
Init();
Task_schedule();
Print();
return 0;
}
04-11
2431

05-21
5780

12-07
1303
