正解:$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. LeetCode58 Length of Last Word

    题目: Given a string s consists of upper/lower-case alphabets and empty space characters ' ', return t ...

  2. 8-2udp和tcp网络编程以及粘包和解决粘包的方法

    一  tcp网络编程 server 端 import socket sk=socket.socket() #实例化一个对象 sk.setsockopt(socket.SOL_SOCKET,socket ...

  3. LOJ6079「2017 山东一轮集训 Day7」养猫

    养ImmortalCO k可重区间问题 的增强版:有上下界! 直接都选择s[i],然后再把一些调整到e[i] 考虑通过最大流的“最大”,使得至少每k个有me个e, 通过最大流的“上界”,限制每k个最多 ...

  4. 1878: [SDOI2009]HH的项 莫队算法-离线查询区间内部不同数字的个数

    #include<iostream> #include<stdio.h> #include<string.h> #include<algorithm> ...

  5. dubbo开启access log步骤

    1,maven依赖 maven version由2.5.3调整为2.5.3.2 <dependency>     <groupId>com.alibaba</groupI ...

  6. Django入门2--Django的应用和开发第一个Template

    Django创建应用的命令: 应用的目录: 开发第一个Template:

  7. dotnet core 添加 SublimeText 编译插件

    因为 SublimeText 有很多插件都是使用 Py 写的,而我想使用 dotnet core 给 SublimeText 写一个编译插件,也就是在我使用 Markdown 的时候可以点击编译,将 ...

  8. P1061 最长连号

    题目描述 输入n个正整数,(1<=n<=10000),要求输出最长的连号的长度.(连号指从小到大连续自然数) 输入格式 第一行,一个数n; 第二行,n个正整数,之间用空格隔开. 输出格式 ...

  9. springboot配置大全

    此配置大全是在官方开发者文档中看到的,地址:https://docs.spring.io/spring-boot/docs/1.5.6.RELEASE/reference/html/common-ap ...

  10. 2018-4-12-win10-uwp-使用油墨输入

    title author date CreateTime categories win10 uwp 使用油墨输入 lindexi 2018-04-12 14:19:58 +0800 2018-2-13 ...