题解 | #称砝码#
称砝码
https://www.nowcoder.com/practice/f9a4c19050fc477e9e27eb75f3bfd49c
// HJ41 称砝码.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 #include<iostream> #include<bits/stdc++.h> using namespace std; int main() { int n; while (cin >> n) { int sum = 0; vector<int>weight(n); vector<int>nums(n); for (int i = 0; i < n; i++) { cin >> weight[i]; } for (int i = 0; i < n; i++) { cin >> nums[i]; sum += nums[i] * weight[i]; } vector<bool>dp(sum + 1, false); dp[0] = true; for (int i = 0; i < n; i++) { for (int j = 0; j < nums[i]; j++) { for (int k = sum; k >= weight[i]; k--) { if (dp[k - weight[i]]) { dp[k] = true; } } } } int count = 0; for (int i = 0; i <= sum; i++) { if (dp[i]) { count++; } } cout << count << endl; } return 0; }