第二题:public static void main(String[] args) { Scanner in = new Scanner(System.in); int goodsNum = in.nextInt(); int bag = in.nextInt(); int[] goodsWei = new int[goodsNum]; int[] goodsVal = new int[goodsNum]; for (int i = 0; i < goodsNum; i++) { goodsWei[i] = in.nextInt(); } for (int i = 0; i < goodsNum; i++) { goodsVal[i] = in.nextInt(); } System.out.println(findMaxVal(goodsWei, goodsVal, 0, bag)); } private static int findMaxVal(int[] goodsWei, int[] goodsVal, int index, int bag) { if (bag < 0) { return -1; } if (index >= goodsVal.length) { return 0; } int v1 = findMaxVal(goodsWei, goodsVal, index + 1, bag); int v2 = findMaxVal(goodsWei, goodsVal, index + 1, bag - goodsWei[index]); int v3 = 0; if (v2 != -1) { v3 = goodsVal[index] + v2; } return Math.max(v1, v3); }