题解 | #称砝码#

称砝码

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-21 17:16
科大讯飞 算法工程师 28.0k*14.0, 百分之三十是绩效,惯例只发0.9
点赞 评论 收藏
分享
挣K存W养DOG:他真的很中意你,为什么不回他
点赞 评论 收藏
分享
头像
11-07 01:12
重庆大学 Java
精致的小松鼠人狠话不多:签哪了哥
点赞 评论 收藏
分享
点赞 1 评论
分享
牛客网
牛客企业服务