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;
    }
    
  • 相关阅读:
    使用contentProvider
    创建Sqlite数据库(一)
    AIDL实现进程间通信
    Messenger实现进程间通信(IPC)
    Serializable使用
    Parcelable使用(二)
    STAR法则
    Python系列-------基本语法
    前端随心记---------面试题集
    前端随心记---------惟客科技面试
  • 原文地址:https://www.cnblogs.com/qie-wei/p/12094112.html
Copyright © 2011-2022 走看看