https://github.com/ultraji/nowcoder
这个是答案的git地址
利用集合去重的性质
先在集合里面添加0
当第一个砝码进来的时候
{0} 变成 {0,0+1}->{0,1}
当第二个砝码进来之后
{0,1} 变成 {0,1,0+1,1+1}--> {0,1,2}
当第三个砝码进来之后
{0,1,2} 变成{0,1,2,0+2,1+2,2+2}
---》 {0,1,2,3,4}
全部遍历一遍之后结束整个程序即可,这个就是所能得到的所有结果
#include<bits/stdc++.h>
using namespace std;
//考点,set
int main(){
int a[10],N,temp;
while(cin>>N){
vector<int> v;
for(int i =0; i< N;i++){
cin>>a[i];
}
for(int i= 0; i< N;i++){
cin>>temp;
for(int j=0; j< temp;j++) v.push_back(a[i]);
}
set<int> s;
s.insert(0); //0也算是一个初始重量
for(int i=0; i< v.size();i++){//把所有砝码遍历完就行了
set<int> t(s);//声明这个的目的是为了每次在原来的已有重量进行配对
for(auto it=t.begin();it!=t.end();it++){
s.insert(*it+v[i]);
}
}
cout<<s.size()<<endl;
}
return 0;
} 
京公网安备 11010502036488号