我编的程序怎么内存指令错误啊,有人能指导我怎么做吗
独立任务最优调度问题用2台处理机A和B处理n个作业,设第i个作业交给机器A处理需要时间ai,若由B来处理,所需时间为bi.一个作业不能分开由2台机器处理,也没有一个机器同时处理2个作业.设计一个动态规划算法,使得2台机器处理完n个作业所需时间最短.
请求各位帮帮忙啊
#include<stdio.h>
#include<stdlib.h>
#include<iostream.h>
#include<memory>
using namespace std;
template<class T>
void Make3DArray(T*** & mats, const int& n, const int& dimension)
{
mats=new T** [n];
for(int i=0;i<n;i++)
{
mats[i]=new T*[dimension];
for(int j=0;j<dimension;j++)
{
mats[i][j]=new T[dimension];
memset(&mats[i][j][0], T(0),sizeof(T)*dimension);
}
}
}
void dyna(){
int i,j,k,opt;
int n,mn,m=0;
int ***p;
cin>>n;
int *a=new int[n];int *b=new int[n];
for(i=0;i<n;i++)
{cin>>a[i];if(a[i]>m) m=a[i];}
for(i=0;i<n;i++)
{cin>>b[i];if(b[i]>m) m=b[i];}
mn=m*n;
Make3DArray(p,mn+1,n+1);
for(i=0;i<=mn;i++)
for(j=0;j<=mn;j++){
p[i][j][0]=true;
for(k=1;k<=n;k++) p[i][j][k]=false;
}
for(k=1;k<=n;k++)
for(i=0;i<=mn;i++)
for(j=0;j<=mn;j++){
if(i-a[k-1]>=0) p[i][j][k]=p[i-a[k-1]][j][k-1];
if(j-b[k-1]>=0) p[i][j][k]=(p[i][j][k]||p[i][j-b[k-1]][k-1]);
}
for(i=0,opt=mn;i<=mn;i++)
for(j=0;j<=mn;j++)
if(p[i][j][n]){
int tmp=(i>j)?i:j;
if(tmp<opt) opt=tmp;
}
cout<<opt<<endl;
}
int main()
{
dyna();
return 0;
}