题解 | #称砝码#

称砝码

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

#include <iostream>
#include <unordered_set>
#include <vector>
using namespace std;
//求所有能组成的重量的种数,并去重。用set 不需要排序,unordered_set即可
//所有重量的组合,遍历种类,每一种已经算出的重量再里加上法码的重量(遍历个数来加),此时每加出一个新重量都insert到set中去
int main() {
    int n;//种类
      cin>>n;
    vector<int>w(n,0);//记录重量
    vector<int>num(n,0);//记录数量
    unordered_set<int>mess;//记录会有多少中重量
    mess.insert(0);
  
    int i=0;
    for(i=0;i<n;i++){
        cin>>w[i];//输入重量
    }
    for(i=0;i<n;i++){
        cin>>num[i];//输入个数
    }
    for(i=0;i<n;i++){//遍历有多少种发码
        for(int j=1;j<=num[i];j++){//遍历共有多少个发码
        unordered_set<int> tmp(mess);//每一次遍历时,mess的大小立即会改变,导致循环次数变多。再改变mess之前先记下此时的大小,不要在内部循环过多次
            for(unordered_set<int>::iterator it=tmp.begin();it!=tmp.end();it++){
                mess.insert(*it+w[i]);
            }
        }
}
cout<<mess.size()<<endl;

}

注意!在vector构建容器时,其中用到了一个动态的变量n,此时一定要先输入n再去构建!不然无法分配内存空间导致整个程序都可能会有问题!!!!!

全部评论

相关推荐

07-25 10:17
仰恩大学 营销
bg双非,被挂了
投递拼多多集团-PDD等公司10个岗位
点赞 评论 收藏
分享
码砖:求职岗位要突出,一眼就能看到,教育背景放到最后,学校经历没那么重要,项目要重点突出
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务