题解 | #称砝码#

称砝码

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

这道题用set会很快。。。
需要注意的是我最开始陷入了死循环 ,注意要使用2个set集进行交替运算,一个保留原始数据,另一个向中加数,这样才不会死循环
在我的代码中,s负责储存所有的结果,而t则不断复制s的数据,这样就可以避免不断加入数据导致的循环无限

#include <cstdio>
#include <cmath>
#include <algorithm>
#include <iostream>
#include <string>
#include <cstring>
#include <cstdio>
#include <sstream>
#include <stack>
#include <map>
#include <set>
using namespace std;
typedef long long ll;



int main()
{
    int n,m[15],x[15];
    int a[100];
    int i,j;
    set<int>s;
    s.insert(0);
    cin>>n;
    for(i=1; i<=n; i++) //重量
    {
        cin>>m[i];
    }
    for(i=1; i<=n; i++) //数量
    {
        cin>>x[i];
    }
    for(i=1; i<=n; i++)
    {
        int sum=0;
        set<int>t(s);
        for(j=1; j<=x[i]; j++)
        {
            sum+=m[i];
            for(auto it=t.begin(); it!=t.end(); it++)
            {
                s.insert(*it+sum);
            }
        }
    }
    cout<<s.size()<<endl;

    return 0;
}





#题解#
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务