zoukankan      html  css  js  c++  java
  • 计蒜客:得到整数X (二进制枚举子集)

    #include <iostream>
    #include <cstring>
    using namespace std;
    
    int main()
    {
       int n,m;cin>>n>>m;
       int a[30];
       memset(a,0,sizeof(a));
       for(int i=0;i<n;i++)
        cin>>a[i];
       int ans = 0;
       for(int i=0;i<(1<<n);i++)
       {
           int num = 0;
           for(int j=0;j<n;j++)
           {
               if(i&(1<<j))
                  num+=a[j];
           }
           if(num==m) ans++;
       }
       cout<<ans<<endl;
        return 0;
    }
    

    hdu 5616

    和上面一题基本上是一样的,需要注意的是:枚举出砝码所有可以组成的情况,并且标记一下,然后就可以O(1)查询了,不然会超时。。

    #include <iostream>
    #include <cstring>
    using namespace std;
    const int Max =(1<<20)+10;
    int vis[Max];
    int a[30],n;
    void fun()
    {
        memset(vis,0,sizeof(vis));
        int ans =0;
        for(int i=0;i<(1<<n);i++)
        {
            int num=0;
            for(int j=0;j<n;j++)
            {
                if(i&(1<<j)) num+=a[j];
            }
            vis[num]=1;
            for(int j=0; j<n; j++)
            {
                if(num-a[j]>=0)
                {
                     vis[num-a[j]]=1;
                }
            }
        }
    }
    int main()
    {
        int T;cin>>T;
        int x;
        while(T--)
        {
            cin>>n;
            for(int i=0;i<n;i++)
                cin>>a[i];
            fun();
            int m;cin>>m;
            for(int i=0;i<m;i++)
            {
                cin>>x;
                if(vis[x]==1) cout<<"YES"<<endl;
                else cout<<"NO"<<endl;
            }
        }
        return 0;
    }
    
  • 相关阅读:
    树链剖分-bzoj1036
    POJ3489企鹅
    51nod 1130
    51nod-8-16
    51nod-8-15
    51nod 8-14
    51nod1582-n叉树
    51nod1574排列转换
    51nod1785数据流中的算法
    iOS开发--Swift 最近项目开发中遇到的一些小问题与解决方法
  • 原文地址:https://www.cnblogs.com/qie-wei/p/12094112.html
Copyright © 2011-2022 走看看