题解 | #称砝码#
称砝码
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")