题解 | #称砝码#
称砝码
https://www.nowcoder.com/practice/f9a4c19050fc477e9e27eb75f3bfd49c
#include <iostream>
#include <vector>
#include <unordered_set>
using namespace std;
void solve(int n){
vector<int> weights(n, 0);
vector<int> nums(n, 0);
for(int i = 0; i < n; ++i){
cin >> weights[i];
}
for(int i = 0; i < n; ++i){
cin >> nums[i];
}
unordered_set<int> uset;
for(int i = 0; i < n; ++i){
int cur = 0;
unordered_set<int> tempuset = uset;
for(int j = 1; j <= nums[i]; ++j){
cur = weights[i] * j; //不是cur += weights[i] * j
if(tempuset.find(cur) == tempuset.end()) uset.insert(cur);
for(auto num : tempuset){
if(tempuset.find(cur + num) == tempuset.end()) uset.insert(cur + num);
}
}
}
cout << uset.size() + 1 << endl;
}
int main() {
int n;
while (cin >> n) { // 注意 while 处理多个 case
solve(n);
}
return 0;
}
// 64 位输出请用 printf("%lld")

查看13道真题和解析