#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";
}