zoukankan      html  css  js  c++  java
  • SP11469 SUBSET

    题目链接:

    #include <bits/stdc++.h>
    using namespace std;
    #define ll long long
    #define re register
    #define pb push_back
    #define fi first
    #define se second
    const int N=2e6+10;
    void read(int &a)
    {
        a=0;int d=1;char ch;
        while(ch=getchar(),ch>'9'||ch<'0')
            if(ch=='-')
                d=-1;
        a=ch^48;
        while(ch=getchar(),ch>='0'&&ch<='9')
            a=(a<<3)+(a<<1)+(ch^48);
        a*=d;
    }
    int n,m;
    int a[30],cnt,f[N];
    map <int,int> vis;
    vector <int> v[N];
    void dfs1(int i,int sum,int now)
    {
        if(i>=m)
        {
            if(!vis.count(sum)) vis[sum]=++cnt;
            v[vis[sum]].pb(now);
            return;
        }
        dfs1(i+1,sum,now);
        dfs1(i+1,sum+a[i],now|(1<<i));
        dfs1(i+1,sum-a[i],now|(1<<i));
    }
    void dfs2(int i,int sum,int now)
    {
        if(i>=n)
        {
            if(vis.count(sum))
            {
                int x=vis[sum];
                for(auto j:v[x]) f[j|now]=1;
            }
            return;
        }
        dfs2(i+1,sum,now);
        dfs2(i+1,sum+a[i],now|(1<<i));
        dfs2(i+1,sum-a[i],now|(1<<i));
    }
    int main()
    {
        read(n);m=n>>1;
        for(re int i=0;i<n;i++) read(a[i]);
        dfs1(0,0,0),dfs2(m,0,0);
        int ans=0;
        for(re int i=1;i<(1<<n);i++) ans+=f[i];
        printf("%d",ans);
        return 0;
    }
  • 相关阅读:
    SpringBoot整合Spring Data Elasticsearch
    Elasticsearch(一)基础入门
    二叉排序树
    数据结构之栈
    数据结构之队列
    MySQL主从备份
    Redis主从复制之哨兵模式(sentinel)
    shiro核心
    MySQL常用命令
    Docker常用命令
  • 原文地址:https://www.cnblogs.com/acm1ruoji/p/11865942.html
Copyright © 2011-2022 走看看