题解 | #称砝码#

称砝码

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

解题步骤:

1、先求0个砝码的情况,重量为0。

2、求每增加一个砝码的所有情况,放入vecw中。

3、前i个砝码的所有情况为:vecw.size(),

4、第i+1个砝码质量是vecm[i],数量为vecx[i],

和前i个砝码组合vecx[i]*vecw.size()种情况,过滤掉相同的重量,加入vecw中。

5、三重循环:

1、砝码数量i从1-n,表示每次增加一个砝码。

2、前i-1个砝码的所有可能情况,j从0-vecw.size(),vecw.size()的值会动态变化,所以要提前取出来保存。

3、第i个砝码的可能数量k从1-vecx[i],0个和i-1的情况重复,所以不用考虑。

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

size_t Statistic(const vector<int>& vecm, const vector<int>& vecx) {
    vector<int> ws[11];
    vector<int> vecw;
    int w;

    //0个砝码的情况
    vecw.push_back(0);
    //每次增加一个砝码,求i+1个砝码的所有组合
    for (int i = 0; i < vecm.size(); i++) {
        auto len = vecw.size();
        for (int j = 0; j < len; j++) {
            for (int k = 1; k <= vecx[i]; k++) {
                w = vecw[j] + k * vecm[i];
                if (find(vecw.begin(), vecw.end(), w) == vecw.end()) {
                    vecw.push_back(w);
                }
            }
        }

    }

    cout << vecw.size() << endl;

    return vecw.size();
}

int main() {
    int n;
    int m;
    int x;
    vector<int> vecm;
    vector<int> vecx;

    cin >> n;
    cin.ignore(1024, '\n');
    for (int i = 0; i < n; i++) {
        cin >> m;
        vecm.push_back(m);
    }

    cin.ignore(1024, '\n');
    for (int i = 0; i < n; i++) {
        cin >> x;
        vecx.push_back(x);
    }

    Statistic(vecm, vecx);
    return 0;
}

全部评论

相关推荐

来个厂收我吧:首先,市场侧求职我不是很懂。 但是,如果hr把这份简历给我,我会觉得求职人不适合做产品经理。 问题点: 1,简历的字体格式不统一,排版不尽如人意 2,重点不突出,建议参考star法则写个人经历 3,印尼官方货币名称为印度尼西亚卢比(IDR),且GMV690000印尼盾换算为305人民币,总成交额不高。 4,右上角的意向职位在发给其他公司时记得删除。 5,你所有的经历都是新媒体运营,但是你要投市场营销岗位,jd和简历不匹配,建议用AI+提示词,参照多个jd改一下经历内容。 修改建议: 1,统一字体(中文:思源黑体或微软雅黑,英文数字:time new romans),在word中通过表格进行排版(b站学) 2,校招个人经历权重:实习经历=创业经历(大创另算)>项目经历>实训经历>校园经历 3,请将项目经历时间顺序改为倒序,最新的放最上方。 4,求职方向不同,简历文字描述侧重点也需要不同。
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-24 13:32
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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