题解 | #称砝码#
称砝码
https://www.nowcoder.com/practice/f9a4c19050fc477e9e27eb75f3bfd49c
#include <iostream>
#include <vector>
#include <set>
using namespace std;
int main() {
int n;
while(cin >> n) //砝码的总数
{
vector<int> weight(n);
vector<int> num(n);
for (int i = 0;i < n;i++)
{
cin >> weight[i];
}
for (int i = 0;i < n;i++)
{
cin >> num[i];
}
set<int> all_weight;
all_weight.insert(0);
for (int i = 0;i < n;i++)
{
for (int j = 1;j <= num[i];j++)
{
set<int> temp(all_weight); //防止循环过程中修改all_weight中的成员
for (auto it = temp.begin();it != temp.end();it++)
{
all_weight.insert(*it + weight[i]); //先把其中一类的砝码,按照数量放进去(比如有两个1克的砝码,第一次循环先放入1个1克的,第二次循环放入两个1克的,在放入下一类的砝码,将上一次得到的砝码重量加上新砝码的重量)
}
}
}
cout << all_weight.size();
}
}
//1k 2k 3k(1个1k+1个2k) 4k(2个1k+1个2k)
// 64 位输出请用 printf("%lld")

