算法训练 最大体积

/*
算法训练 最大体积  
 
问题描述
  每个物品有一定的体积(废话),不同的物品组合,装入背包会战用一定的总体积。假如每个物品有无限件可用,那么有些体积是永远也装不出来的。为了尽量装满背包,附中的OIER想要研究一下物品不能装出的最大体积。题目保证有解,如果是有限解,保证不超过2,000,000,000
  如果是无限解,则输出0
输入格式
  第一行一个整数n(n<=10),表示物品的件数
  第2行到N+1行: 每件物品的体积(1<= <=500)
输出格式
  一个整数ans,表示不能用这些物品得到的最大体积。
样例输入
3
10
样例输出
*/
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        boolean dp[] = new boolean[65535 + 1000];
        int n = sc.nextInt();
        int[] a = new int[n];
        for (int i = 0; i < n; i++) {
            a[i] = sc.nextInt();
            dp[a[i]] = true;
        }
        sc.close();

        for (int index = 0; index <= 65535; index++) {
            if (dp[index]) {
                for (int i = 0; i < n; i++) {
                    dp[index + a[i]] = true;
                }
            }
        }
        int index = 0;
        for (int i = 65535; i >= 0; i--) {
            if (!dp[i]) {
                index = i;
                break;
            }
        }
        // 如果从末尾开始超过五百个解则有无穷个解
        boolean flag = false;
        for (int i = 65535; i >= 65535 - 500; i--) {
            if (dp[i]) {
                flag = true;
                break;
            }
        }
        if (flag)
            System.out.println(index);
        else
            System.out.println(0);
    }

}
原文地址:https://www.cnblogs.com/Alpharun/p/8622965.html