题解 | #称砝码#
称砝码
http://www.nowcoder.com/practice/f9a4c19050fc477e9e27eb75f3bfd49c
#include <bits/stdc++.h>
using namespace std;
int main ()
{
int n; cin >> n;
int weight[10],nums[10]; //最多10种砝码
for(int i = 0; i < n; i++) cin >> weight[i]; //重量
for(int i = 0; i < n; i++) cin >> nums[i]; //个数
set<int> S,Stmp;
S1.insert(0); //0一定要先加进去(第一轮里只有1个0),不然后面漏掉很多组合
for(int i = 0; i < n; i++)
{
Stmp = S; // 用上一轮的S里的每个重量加上下一组砝码的所有重量组合
for(int j = 1; j <= nums[i]; j++)
{
for(auto itr = Stmp.begin();itr!=Stmp.end();++itr)
S.insert(*itr + weight[i] * j);
}
}
cout<<S.size();
return 0;
}
