CF888E Maximum Subsequence (Meet in the middle,贪心)
题目链接
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,贪心)相关推荐
- CF888E Maximum Subsequence(meet in the middle)
给一个数列和m,在数列任选若干个数,使得他们的和对m取模后最大( \(1<=n<=35\) , \(1<=m<=10^{9}\)) 考虑把数列分成两份,两边分别暴力求出所有的可 ...
- 贪心 ---- E. Maximum Subsequence Value[位运算]
E. Maximum Subsequence Value 题目大意:有点难解释..建议自己看题.我这里就粗略解释:给定一个数组aaa,要求选出具有最大价值的子序列.假设此子序列的长度为kkk,那么最大 ...
- 第一周 01-复杂度2 Maximum Subsequence Sum
Given a sequence of K integers { N1, N2, ..., NK }. A continuous subsequence is defined to ...
- Meet in the middle
搜索是\(OI\)中一个十分基础也十分重要的部分,近年来搜索题目越来越少,逐渐淡出人们的视野.但一些对搜索的优化,例如\(A\)*,迭代加深依旧会不时出现.本文讨论另一种搜索--折半搜索\((meet ...
- PAT甲级1007 Maximum Subsequence Sum :[C++题解]DP,最大子序列和、求最优的区间方案
文章目录 题目分析 题目链接 题目分析 来源:acwing 分析: dp题. 这道题糅合了两个知识点: dp求最值(区间之和) 动态求区间方案:区间之和相等的条件下:要求区间左端点最靠前,如果左端点相 ...
- 1007 Maximum Subsequence Sum
1007 Maximum Subsequence Sum (25 分) Given a sequence of K integers { N1, N2, ..., NK }. A c ...
- PAT甲级 -- 1007 Maximum Subsequence Sum (25 分)
Given a sequence of K integers { N1, N2, ..., NK }. A continuous subsequence is defined to ...
- 【测试点5】1007 Maximum Subsequence Sum (25 分)
立志用最少的代码做最高效的表达 PAT甲级最优题解-->传送门 Given a sequence of K integers { N1 , N2 , -, NK }. A co ...
- PAT 1007 Maximum Subsequence Sum
1007 Maximum Subsequence Sum (25 分) Given a sequence of K integers { N1, N2, ..., NK }. A c ...
最新文章
- camera raw 滤镜预设_Camera Raw中利用预设实现批量化调色,PS这款滤镜真的很好用...
- 再学 GDI+[11]: DrawCurve - 绘制曲线
- chapter_2 索引优先队列
- OVS ofproto(二十三)
- POJ 图算法(3)
- drupal 6.0 入门教程
- 回溯算法的题目,这样做,秒杀!!
- linux修改su的PAM配置文件,linux pam安全认证模块su命令的安全隐患
- Facebook合并WhatsApp和Instagram?德国:展开反垄断调查!
- [数据分析工具] Pandas 不可不知的功能(一)
- Hive日期格式转换
- dms mysql 工具_数据库管理工具DMS
- cJSON 轻量级json解析器 速度快
- EXCEL之画带数据点的折线图只有点没有线
- 关于telnet逛bbs论坛
- EXECUTE IMMEDIATE用法小结
- Learn Git Branching 学习笔记(关于origin和它的周边——Git远程仓库高级操作篇)
- 如何一键重装Win10系统图文教程
- Spring boot 自定义banner的在线制作
- Java多线程开发——一个简单的数字加减小例子