zoukankan      html  css  js  c++  java
  • $CF888E Maximum Subsequence$ 搜索

    正解:$meet in the middle$

    解题报告:

    传送门$QwQ$.

    发现数据范围为$nleq 35$,所以$2^{frac{n}{2}}$是可做的.

    所以先拆成$A,B$两个集合分别跑个爆搜,然后分别排个序,对于$A$中的每个数$A_i$,发现有两种可能是最优解.一种是$A_i+B_i<M$.一种是$M<A_i+B_i<2M$(显然会先给$A,B$中的数取膜嘛$QwQ$.

    然后对于第一种用个指针扫下就行,第二种发现这时选的一定是$B_{max}$

    然后就做完了$QwQ$.

     

    #include<bits/stdc++.h>
    using namespace std;
    #define il inline
    #define gc getchar()
    #define ri register int
    #define rb register bool
    #define rc register char
    #define rp(i,x,y) for(ri i=x;i<=y;++i)
    #define my(i,x,y) for(ri i=x;i>=y;--i)
    #define e(i,x) for(ri i=head[x];i;i=edge[i].nxt)
    
    const int N=40;
    int n,mod,a[N],as;
    vector<int>V[2];
    
    il int read()
    {
        rc ch=gc;ri x=0;rb y=1;
        while(ch!='-' && (ch>'9' || ch<'0'))ch=gc;
        if(ch=='-')ch=gc,y=0;
        while(ch>='0' && ch<='9')x=(x<<1)+(x<<3)+(ch^'0'),ch=gc;
        return y?x:-x;
    }
    void dfs(ri sum,ri nw,ri lim,ri num)
    {
        if(sum>=mod)sum-=mod;
        if(nw>lim){V[num].push_back(sum);return;}
        dfs(sum+a[nw],nw+1,lim,num);dfs(sum,nw+1,lim,num);
    }
    
    int main()
    {
        //freopen("888E.in","r",stdin);freopen("888E.out","w",stdout);
        n=read();mod=read();rp(i,1,n)a[i]=read()%mod;dfs(0,1,n>>1,0);dfs(0,(n>>1)+1,n,1);
        sort(V[0].begin(),V[0].end());sort(V[1].begin(),V[1].end());
        unique(V[0].begin(),V[0].end());unique(V[1].begin(),V[1].end());
        ri sz=V[0].size(),r=V[1].size()-1,mx=V[1][r];
        rp(i,0,sz-1)
        {while(~r && V[0][i]+V[1][r]>=mod)--r;if(~r)as=max(as,V[0][i]+V[1][r]);;as=max(as,(V[0][i]+mx)%mod);}
        printf("%d
    ",as);
        return 0;
    }
    讲道理我真的好喜欢meet-in-the-middle啊,,,贼好写QwQ

     

  • 相关阅读:
    对抗杀软高级启发(主动防御)技术
    __readfsdword __readgsqword PEB TEB
    net1 user
    vc 获取windows 网卡信息
    RunPE
    windows crpyt API 实现DES 3DES 3DES_112 加解密
    软件开发图标收藏
    有关windows 网卡信息获取
    BCGPContorBar 静态工程设置详解
    (二)特征匹配
  • 原文地址:https://www.cnblogs.com/lqsukida/p/11644631.html
Copyright © 2011-2022 走看看