题解 | #称砝码#
称砝码
https://www.nowcoder.com/practice/f9a4c19050fc477e9e27eb75f3bfd49c
#include <iostream>
#include <set>
#include <vector>
using namespace std;
int main()
{
int nums;
cin>>nums;
int*arrWeight=new int[nums];
int*arrNum=new int[nums];
int temp=0;
while(temp<nums)
cin>>arrWeight[temp++]; //重量
temp=0;
while(temp<nums)
cin>>arrNum[temp++]; //个数
std::set<int>ret; //利用set容器不允许存在相同的键
std::vector<int>tempVec1,tempVec2;
for(int i=0;i<nums;++i)
{
for(int j=1;j<=arrNum[i];++j)
tempVec1.push_back(arrWeight[i]*j); //先把第i种砝码自身所有重量暂时保存起来
for(int val1:ret)
for(int val2:tempVec1)
tempVec2.push_back(val1+val2); //然后和保存在set里的重量相加,暂时保存起来
for(int val:tempVec2)
ret.insert(val); //保存起来
for(int val:tempVec1)
ret.insert(val); //保存第i种砝码自身所有重量
tempVec1.clear();
tempVec2.clear();
}
delete[]arrNum;
delete[]arrWeight;
cout<<ret.size()+1; //包括0
}
// 64 位输出请用 printf("%lld")
查看11道真题和解析