题目链接

Solution

Meet in the middle.
考虑到 \(2^{35}\) 枚举会超时,于是分成两半枚举(尽量平均).
然后不能 \(n^2\) 去匹配,需要用到一点贪心:
将数分成 \(p,q\) 两组,那么对于任意数 \(p_i\) ;
它与 \(q\) 数组中组成最大得到的值即为
最大的与 \(p_i\) 之和不超过\(m\) 的数.
然后就可以贪心优化了.
还要注意一点就是最大的两个也要考虑一次.

Code

#include<bits/stdc++.h>
#define N 1<<20
#define ll long long
using namespace std;ll n,m,w[40],p[N],q[N],ans;
ll cntp,cntq,a[40],b[40];void dfs1()
{ll num=(n+1)/2;for(ll i=0;i<num;i++)a[i]=w[i*2+1];ll tot=(1<<num)-1;for(ll i=1;i<=tot;i++){ll Tot=0;for(ll j=0;j<num;j++)if((1<<j)&i)Tot+=a[j],Tot%=m;p[++cntp]=Tot;}
}void dfs2()
{ll num=n/2;for(ll i=0;i<num;i++)b[i]=w[(i+1)*2];ll tot=(1<<num)-1;for(ll i=1;i<=tot;i++){ll Tot=0;for(ll j=0;j<num;j++)if((1<<j)&i)Tot+=b[j],Tot%=m;q[++cntq]=Tot;}
}int main()
{scanf("%lld%lld",&n,&m);for(ll i=1;i<=n;i++)scanf("%lld",&w[i]);sort(w+1,w+n+1);dfs1(); dfs2();sort(p+1,p+cntp+1);sort(q+1,q+cntq+1);//for(ll i=1;i<=cntp;i++)cout<<p[i]<<' ';cout<<endl;//for(ll i=1;i<=cntq;i++)cout<<q[i]<<' ';cout<<endl;int i=0,j=cntq;while(i<=cntp){while(p[i]+q[j]>=m) --j;ans=max(ans,p[i]+q[j]),++i;}//贪心优化部分ans=max(ans,(p[cntp]+q[cntq])%m);cout<<ans<<endl;
}

转载于:https://www.cnblogs.com/Kv-Stalin/p/9852446.html

CF888E Maximum Subsequence (Meet in the middle,贪心)相关推荐

  1. CF888E Maximum Subsequence(meet in the middle)

    给一个数列和m,在数列任选若干个数,使得他们的和对m取模后最大( \(1<=n<=35\) , \(1<=m<=10^{9}\)) 考虑把数列分成两份,两边分别暴力求出所有的可 ...

  2. 贪心 ---- E. Maximum Subsequence Value[位运算]

    E. Maximum Subsequence Value 题目大意:有点难解释..建议自己看题.我这里就粗略解释:给定一个数组aaa,要求选出具有最大价值的子序列.假设此子序列的长度为kkk,那么最大 ...

  3. 第一周 01-复杂度2 Maximum Subsequence Sum

    Given a sequence of K integers { N​1​​, N​2​​, ..., N​K​​ }. A continuous subsequence is defined to ...

  4. Meet in the middle

    搜索是\(OI\)中一个十分基础也十分重要的部分,近年来搜索题目越来越少,逐渐淡出人们的视野.但一些对搜索的优化,例如\(A\)*,迭代加深依旧会不时出现.本文讨论另一种搜索--折半搜索\((meet ...

  5. PAT甲级1007 Maximum Subsequence Sum :[C++题解]DP,最大子序列和、求最优的区间方案

    文章目录 题目分析 题目链接 题目分析 来源:acwing 分析: dp题. 这道题糅合了两个知识点: dp求最值(区间之和) 动态求区间方案:区间之和相等的条件下:要求区间左端点最靠前,如果左端点相 ...

  6. 1007 Maximum Subsequence Sum

    1007 Maximum Subsequence Sum (25 分) Given a sequence of K integers { N​1​​, N​2​​, ..., N​K​​ }. A c ...

  7. PAT甲级 -- 1007 Maximum Subsequence Sum (25 分)

    Given a sequence of K integers { N​1​​, N​2​​, ..., N​K​​ }. A continuous subsequence is defined to ...

  8. 【测试点5】1007 Maximum Subsequence Sum (25 分)

    立志用最少的代码做最高效的表达 PAT甲级最优题解-->传送门 Given a sequence of K integers { N​1​​ , N​2​​ , -, N​K​​ }. A co ...

  9. PAT 1007 Maximum Subsequence Sum

    1007 Maximum Subsequence Sum (25 分) Given a sequence of K integers { N​1​​, N​2​​, ..., N​K​​ }. A c ...

最新文章

  1. camera raw 滤镜预设_Camera Raw中利用预设实现批量化调色,PS这款滤镜真的很好用...
  2. 再学 GDI+[11]: DrawCurve - 绘制曲线
  3. chapter_2 索引优先队列
  4. OVS ofproto(二十三)
  5. POJ 图算法(3)
  6. drupal 6.0 入门教程
  7. 回溯算法的题目,这样做,秒杀!!
  8. linux修改su的PAM配置文件,linux pam安全认证模块su命令的安全隐患
  9. Facebook合并WhatsApp和Instagram?德国:展开反垄断调查!
  10. [数据分析工具] Pandas 不可不知的功能(一)
  11. Hive日期格式转换
  12. dms mysql 工具_数据库管理工具DMS
  13. cJSON 轻量级json解析器 速度快
  14. EXCEL之画带数据点的折线图只有点没有线
  15. 关于telnet逛bbs论坛
  16. EXECUTE IMMEDIATE用法小结
  17. Learn Git Branching 学习笔记(关于origin和它的周边——Git远程仓库高级操作篇)
  18. 如何一键重装Win10系统图文教程
  19. Spring boot 自定义banner的在线制作
  20. Java多线程开发——一个简单的数字加减小例子

热门文章

  1. java math mod_java8 Math新增方法介绍
  2. Linux安装RabbitMQ及问题
  3. redis清空数据、查看数据量、查看占用内存命令
  4. BZOJ1195[HNOI2006]最短母串——AC自动机+BFS+状态压缩
  5. 你能理解、不能理解和不需要理解的量子计算
  6. jpa基于按annotation的hibernate主键生成策略
  7. 9.20 模拟试题
  8. 2014广东高考分数线
  9. jmeter 及测试
  10. 烂泥:dnsmasq搭建简易DNS服务器