正解:$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. 自定义View系列教程02--onMeasure源码详尽分析

    深入探讨Android异步精髓Handler 站在源码的肩膀上全解Scroller工作机制 Android多分辨率适配框架(1)- 核心基础 Android多分辨率适配框架(2)- 原理剖析 Andr ...

  2. 17-3 cookie和session

    一 . Cookie 1.cookie 是什么? 保存在浏览器端的键值对! 服务端在返回响应的时候,告诉浏览器保存的键值对!浏览器可以拒绝保存Cookie. 2. 为什么要有cookie? HTTP请 ...

  3. SLS机器学习最佳实战:日志聚类+异常告警

    1.手中的锤子都有啥? 围绕日志,挖掘其中更大价值,一直是我们团队所关注.在原有日志实时查询基础上,今年SLS在DevOps领域完善了如下功能: 上下文查询 实时Tail和智能聚类,以提高问题调查效率 ...

  4. 【BZOJ1227】[SDOI2009]虔诚的墓主人

    E. 虔诚的墓主人 题目描述 小W 是一片新造公墓的管理人.公墓可以看成一块N×M 的矩形,矩形的每个格点,要么种着一棵常青树,要么是一块还没有归属的墓地.当地的居民都是非常虔诚的基督徒,他们愿意提前 ...

  5. 获取select文本框的下拉菜单文字内容的两种方式

    <body> <div class="box"> <select id="sel"> <option value=&q ...

  6. Windows系统下三十款优秀开源软件

    Windows系统下三十款优秀开源软件 1.Firefox 官方网站:http://www.getfirefox.com/ 可替换Internet Explorer 功能特点:如果你还没有使用Fire ...

  7. win10如何关闭计算机设备和驱动器非硬盘图标

    按win键+R,打开注册表regedit,找到这个路径: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\My ...

  8. [C#] 用ServiceStack读写redis的性能问题

    ServiceStack.Redis有个方法叫 AddRangeToList,这个方法是有性能问题的.这个方法的实现代码如下: public void AddRangeToList(string li ...

  9. 2013-10-6 datagridview实现换行并自动设置行高

    datagridview设置换行,如下,文本设置\r\n即可换行 dv4.DefaultCellStyle.WrapMode = DataGridViewTriState.True; dv4.Auto ...

  10. js(一) 三大事件 实现注册验证

    ps:小声比比,为什么一周多没更,因为js真的好难啊. 上一周做了一整周的jsp+sevlet+mysql做了一个MVC模式的最基本的新闻系统源码会有空搞出来的 好累 好多的. 三大事件 (鼠标事件. ...