递归最后一个用例超时,只能for循环遍历 for 循环遍历

import java.util.Scanner;
import java.util.Stack;
import java.util.Set;
import java.util.HashSet;
import java.util.List;
import java.util.ArrayList;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static Set<Integer> set = new HashSet<>();
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextInt()) { // 注意 while 处理多个 case
            int count = in.nextInt();
            int[] wight = new int[count]; 
            for (int i = 0; i < count; i++) {
                wight[i] = in.nextInt();
            }
            int[] num = new int[count];
            for (int i = 0; i < count; i++) {
                num[i] = in.nextInt();
            }
            set.add(0);
            dfs(wight, num);
            System.out.println(set.size());
        }
    }
    public static void dfs(int[] lengthArray, int[] num) {
        for (int i = 0; i < lengthArray.length; i++) {
            List<Integer> list = new ArrayList<>(set);
            for (int j = 0; j <= num[i]; j++) {
                for (int k = 0; k < list.size(); k++) {
                    set.add(list.get(k) + j * lengthArray[i]);
                }   
            }
        }
    }
    
}

递归的方法

import java.util.Scanner;
import java.util.Stack;
import java.util.Set;
import java.util.HashSet;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static Set<Integer> set = new HashSet<>();
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextInt()) { // 注意 while 处理多个 case
            int count = in.nextInt();
            int[] wight = new int[count]; 
            for (int i = 0; i < count; i++) {
                wight[i] = in.nextInt();
            }
            int[] num = new int[count];
            for (int i = 0; i < count; i++) {
                num[i] = in.nextInt();
            }
            dfs(wight, num, 0, 0);
            System.out.println(set.size());
        }
    }
    public static void dfs(int[] lengthArray, int[] num, int index, int sum) {
        if (index == lengthArray.length) {
            set.add(sum);
            return;
        } 
        for(int i = 0; i <= num[index]; i++) {
             dfs(lengthArray, num, index + 1, sum + i * lengthArray[index]);
        }
    }
}