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

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

}
    原文作者:动态规划
    原文地址: https://blog.csdn.net/huangxiang360729/article/details/51099022
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞