import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int[] m = new int[n];
for (int i = 0; i < n; i++) {
m[i] = scanner.nextInt();
}
int[] x = new int[n];
for (int i = 0; i < n; i++) {
x[i] = scanner.nextInt();
}
int sum = 0;
for (int i = 0; i < n; i++) {
sum += m[i] * x[i];
}
boolean[] dp = new boolean[sum + 1];
dp[0] = true;
for (int i = 0; i < n; i++) {
int mi = m[i];
int xi = x[i];
List<Integer> di = new ArrayList<>();
for (int k = 0; k <= xi; k++) {
di.add(k * mi);
}
boolean[] temp = new boolean[sum + 1];
for (int j = 0; j <= sum; j++) {
if (dp[j]) {
for (int d : di) {
if (j + d <= sum) {
temp[j + d] = true;
}
}
}
}
dp = temp;
}
int count = 0;
for (boolean b : dp) {
if (b) {
count++;
}
}
System.out.println(count);
}
}
https://www.nowcoder.com/discuss/727521113110073344
思路:
1.输入处理:读取砝码种类数、砝码重量数组和数量数组。
2.总重量计算:计算所有砝码的最大可能总重量。
3.动态规划初始化:初始化dp数组,只有重量0是可能的。
4.处理每个砝码:生成当前砝码的所有可能增量,并使用这些增量更新动态规划数组。
5.结果统计:统计动态规划数组中为true的元素数量。



京公网安备 11010502036488号