zoukankan      html  css  js  c++  java
  • codeforces/gym/101291/B

    题意:给你n个杠铃的杆子,在给你m个杠铃片,问你能组成多少个重量不同的完整杠铃(杠铃杆子也算一个完整的的杠铃)

    解题思路:dfs直接搜,数据很小,每个杠铃片有三种状态(放杆子左边,放杆子右边,两边都不放),用set存一下,去下重,正好要从小到大序输出

    #include<iostream>
    #include<algorithm>
    #include<cstring>
    #include<cstdio>
    #include<set>
    #define ll long long
    using namespace std;
    int a[20];
    int b[20];
    int n,m;
    int cnt=0;
    set<ll>q;
    void dfs(ll x,ll l,ll r)
    {
        if(x>m)
            return;
        if(l==r)
        {
            q.insert(r+l);
        }
        dfs(x+1,l+a[x+1],r);
        dfs(x+1,l,r+a[x+1]);
        dfs(x+1,l,r);
    }
    int main()
    {
        set<ll>ans;
        cin>>n>>m;
        for(int i=1;i<=n;i++)
            cin>>b[i];
        for(int i=1;i<=m;i++)
            cin>>a[i];
        a[0]=0;
        dfs(0,0,0);
        for(int i=1;i<=n;i++)
        {
            for(set<ll>::iterator it=q.begin();it!=q.end();it++)
            {
                ans.insert(*it+b[i]);
            }
        }
        for(set<ll>::iterator it=ans.begin();it!=ans.end();it++)
        {
            cout<<*it<<endl;
        }
        return 0;
    }
    

      

  • 相关阅读:
    0_ReviewML-1
    1_Convolution(卷积)
    0_overview
    遗传算法
    使用多线程下载文件思路
    大文件断点下载
    输出流
    大文件的下载
    XML解析
    文件下载
  • 原文地址:https://www.cnblogs.com/huangdao/p/8781935.html
Copyright © 2011-2022 走看看