1. 程式人生 > >演算法_動態規劃_獨立任務最優排程問題

演算法_動態規劃_獨立任務最優排程問題

問題描述
  用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); } }