题解 | #称砝码#

称砝码

https://www.nowcoder.com/practice/f9a4c19050fc477e9e27eb75f3bfd49c

#include <iostream>
#include <vector>
#include <set>
using namespace std;

int main() {
    int n;
    while(cin >> n)  //砝码的总数
    {
        vector<int> weight(n);
        vector<int> num(n);
        for (int i = 0;i < n;i++)
        {
            cin >> weight[i];
        }
        for (int i = 0;i < n;i++)
        {
            cin >> num[i];
        }

        set<int> all_weight;
        all_weight.insert(0);
        for (int i = 0;i < n;i++)
        {
            for (int j = 1;j <= num[i];j++)
            {
                set<int> temp(all_weight);  //防止循环过程中修改all_weight中的成员
                for (auto it = temp.begin();it != temp.end();it++)
                {
                    all_weight.insert(*it + weight[i]);   //先把其中一类的砝码,按照数量放进去(比如有两个1克的砝码,第一次循环先放入1个1克的,第二次循环放入两个1克的,在放入下一类的砝码,将上一次得到的砝码重量加上新砝码的重量)
                }
            }
        }
        cout << all_weight.size();
    }
}

//1k 2k 3k(1个1k+1个2k) 4k(2个1k+1个2k) 
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

HNU_fsq:建议直接出国,这简历太6了。自愧不如
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务