正解:$meet\ in\ the\ middle$

解题报告:

传送门$QwQ$.

发现数据范围为$n\leq 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=;
int n,mod,a[N],as;
vector<int>V[]; il int read()
{
rc ch=gc;ri x=;rb y=;
while(ch!='-' && (ch>'' || ch<''))ch=gc;
if(ch=='-')ch=gc,y=;
while(ch>='' && ch<='')x=(x<<)+(x<<)+(ch^''),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+,lim,num);dfs(sum,nw+,lim,num);
} int main()
{
//freopen("888E.in","r",stdin);freopen("888E.out","w",stdout);
n=read();mod=read();rp(i,,n)a[i]=read()%mod;dfs(,,n>>,);dfs(,(n>>)+,n,);
sort(V[].begin(),V[].end());sort(V[].begin(),V[].end());
unique(V[].begin(),V[].end());unique(V[].begin(),V[].end());
ri sz=V[].size(),r=V[].size()-,mx=V[][r];
rp(i,,sz-)
{while(~r && V[][i]+V[][r]>=mod)--r;if(~r)as=max(as,V[][i]+V[][r]);;as=max(as,(V[][i]+mx)%mod);}
printf("%d\n",as);
return ;
}

讲道理我真的好喜欢meet-in-the-middle啊,,,贼好写QwQ

随机推荐

  1. js+canvas黑白棋

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  2. vlc 网页插件的 使用与控制 API

    下面开始使用教程: html文档结构: <object class="vlc" type='application/x-vlc-plugin' events='True' w ...

  3. Python的unittest拓展和HTMLReport SKIP报表扩展

    C:\Python27\Lib中修改unittest内容 unittest 在init中添加Myskip代码: __all__ = ['TestResult', 'TestCase', 'TestSu ...

  4. Eclipsed的SVN插件不能识别之前工作空间的项目

    今天用Eclipse的SVN插件,由于之前项目是用"tortoisesvn"进行checkout的,并且已经在工作空间中使用.后来用来Ecplise的SVN插件,可是发现右键Tea ...

  5. Open Source Projects Released By Google

    Open Source Projects Released By Google Google has released over 20 million lines of code and over 9 ...

  6. js 过滤富文本标签数据

    var str = '<p><code>uni-app</code> 完整支持 <code>Vue</code> 实例的生命周期,同时还新增 ...

  7. centos6 名字服务dnsmasq配置

    1 主机名配置 主机hd1配置(后面配置为名字服务器) [grid_hd@hd1 Desktop]$ cat /etc/sysconfig/network NETWORKING=yes HOSTNAM ...

  8. springboot2.04与activiti 6.0集成

    本文就不对activiti做解释,下面直接看项目集成 以下顺序方面根据我的理解来,可以先从第二章看,再看第一张与第三章 增加activiti表的API,备注用. 目录 一.springboot2.X集 ...

  9. jq操作class类

    https://www.cnblogs.com/sandraryan/ 鼠标移入移除切换样式 方法一: css .menu { color: green; } .active { color: red ...

  10. uni-app学习记录07-生命周期

    <template> <view class="content"> 我是首页 </view> </template> <scr ...