越靠后的题目就越有难度了
这道题目主要是用了集合的思想,不断加上砝码的重量
用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;
}