题解 | #称砝码#

称砝码

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")

全部评论

相关推荐

我已成为0offer的糕手:别惯着,胆子都是练出来的,这里认怂了,那以后被裁应届被拖工资还敢抗争?
点赞 评论 收藏
分享
一颗宏心:华为HR晚上过了十二点后还给我法消息。
点赞 评论 收藏
分享
点赞 1 评论
分享
牛客网
牛客企业服务