算法_动态规划_独立任务最优调度问题

来源:互联网 发布:中国电信4g网络频段 编辑:程序博客网 时间:2024/05/16 13:49

问题描述
  用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);    }}
0 0