/* 算法训练 最大体积 问题描述 每个物品有一定的体积(废话),不同的物品组合,装入背包会战用一定的总体积。假如每个物品有无限件可用,那么有些体积是永远也装不出来的。为了尽量装满背包,附中的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); } }