越靠后的题目就越有难度了

这道题目主要是用了集合的思想,不断加上砝码的重量

用set来去重

#include <bits/stdc++.h>
using namespace std;


void weights(vector<int> weight, vector<int> nums, int n) {
    unordered_set<int> s;
    s.insert(0);
    for(int i = 0; i < n; i++) {
        for(int j = 1; j <= nums[i]; j++) {
            unordered_set<int> temp;
            temp = s;//将s复制给temp,进行加法运算
            for(auto iter = temp.begin(); iter != temp.end(); iter++) {
                s.insert(*iter + weight[i]);
            }
        }
    }
    cout << s.size() <<endl;
}


int main()
{
    int n;//砝码种类
    int a,b;
    cin >> n;
    vector<int> weight(n);//每种砝码的重量
    vector<int> nums(n);//每种砝码的数量
    //输入
    for(int i = 0; i < n; i++) {
        cin>>a;
        weight[i] = a;
    }
    for(int i = 0; i < n; i++) {
        cin>>b;
        nums[i] = b;
    }
    weights(weight, nums, n);

    return 0;
}