演算法_動態規劃_獨立任務最優排程問題
阿新 • • 發佈:2019-01-30
問題描述
用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);
}
}