问题描述
用2 台处理机A 和B 处理n个作业。设第i 个作业交给机器A 处理时需要时间ai,若由机器B来处理,则需要时间bi。由于各作业的特点和机器的性能关系,很可能对于某些i,有ai>=bi,而对于某些j,j≠i,有aj
import java.util.Scanner;
public class Main {
private static int n;
private static int[] a;
private static int[] b;
private static int aSum=0;
private static int bSum=0;
private static boolean[][][] p;
/** * @param args */
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
n=sc.nextInt();
a=new int[n+1];
b=new int[n+1];
for(int i=1;i<=n;i++){
a[i]=sc.nextInt();
aSum+=a[i];
}
for(int i=1;i<=n;i++){
b[i]=sc.nextInt();
bSum+=b[i];
}
p=new boolean[aSum+1][bSum+1][n+1];
for(int i=0;i<=aSum;i++){
for(int j=0;j<=bSum;j++){
p[i][j][0]=true;
}
}
for(int k=1;k<=n;k++){
for(int i=0;i<=aSum;i++){
for(int j=0;j<=bSum;j++){
if(i>=a[k]){
p[i][j][k]=p[i-a[k]][j][k-1];
}
if(j>=b[k]){
p[i][j][k]=p[i][j][k]||p[i][j-b[k]][k-1];
}
}
}
}
int minIJ=Integer.MAX_VALUE;
for(int i=0;i<=aSum;i++){
for(int j=0;j<=bSum;j++){
if(p[i][j][n]){
if(Math.max(i,j)<minIJ){
minIJ=Math.max(i, j);
}
}
}
}
System.out.println(minIJ);
}
}