题解 | #称砝码#

称砝码

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

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

void solve(int n){
    vector<int> weights(n, 0);
    vector<int> nums(n, 0);
    for(int i = 0; i < n; ++i){
        cin >> weights[i];
    } 
    for(int i = 0; i < n; ++i){
        cin >> nums[i];
    }
    unordered_set<int> uset;

    for(int i = 0; i < n; ++i){
        int cur = 0;
        unordered_set<int> tempuset = uset;
        for(int j = 1; j <= nums[i]; ++j){
            cur = weights[i] * j;  //不是cur += weights[i] * j
            if(tempuset.find(cur) == tempuset.end()) uset.insert(cur);
            for(auto num : tempuset){
                if(tempuset.find(cur + num) == tempuset.end()) uset.insert(cur + num);
            }
        }
    }

    cout << uset.size() + 1 << endl;
}

int main() {
    int n;
    while (cin >> n) { // 注意 while 处理多个 case
        solve(n);
    }
    return 0;
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

不愿透露姓名的神秘牛友
02-12 10:05
小米集团 算法工程师 28.0k*15.0
泡沫灬一触即破:楼上那个看来是看人拿高薪,自己又不如意搁这泄愤呢是吧,看你过往评论很难不怀疑你的精神状态
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务