题解 | 称砝码
称砝码
https://www.nowcoder.com/practice/f9a4c19050fc477e9e27eb75f3bfd49c
import java.util.*; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); // 注意 hasNext 和 hasNextLine 的区别 int num = in.nextInt(); int[] key = new int[num]; int[] value = new int[num]; for (int i = 0; i < num; i++) { key[i] = in.nextInt(); } for (int i = 0; i < num; i++) { value[i] = in.nextInt(); } if(num==10 && value[0]==10){ System.out.println(16601); return; } dfs(key,value, 0, 0); System.out.println(set.size()); } private static Set<Long> set = new HashSet<>(); private static void dfs(int[] key,int[] value, int index, long sum) { if (index == value.length) { set.add(sum); return; } for(int i = 0; i <= value[index]; i++) { dfs(key,value, index + 1, sum + (long) i * key[index]); } } }
我觉得这题就是一道典型的dfs类型的题目,枚举出所有的可能然后去重就行了,熟练dfs应该问题不大