HihoCoder - 1496:寻找最大值(高维前缀和||手动求子集)
描述
给定N个数A1, A2, A3, ... AN,小Ho想从中找到两个数Ai和Aj(i ≠ j)使得乘积Ai × Aj × (Ai AND Aj)最大。其中AND是按位与操作。
小Ho当然知道怎么做。现在他想把这个问题交给你。
输入
第一行一个数T,表示数据组数。(1 <= T <= 10)
对于每一组数据:
第一行一个整数N(1<=N<=100,000)
第二行N个整数A1, A2, A3, ... AN (0 <= Ai <220)
输出
一个数表示答案
样例输入
2
3
1 2 3
4
1 2 4 5
样例输出
12
80
思路:Ai*Aj*(Ai&Aj)我们枚举第三部分,假设第三部分为x=Ai&Aj,然后我们取x的超集的最大值和次大值即可。
对于每个Ai我们可以枚举子集,用Ai取更新子集的最大次大值。4777ms;
#include<bits/stdc++.h>
using namespace std;
const int maxn=(<<)+;
int Mx[maxn],Se[maxn]; long long ans;
int main()
{
int T,N,x;
scanf("%d",&T);
while(T--){
memset(Mx,,sizeof(Mx));
memset(Se,,sizeof(Se));
scanf("%d",&N);
for(int i=;i<=N;i++){
scanf("%d",&x);
for(int j=x;j;j=(j-)&x){
if(x>Mx[j]){
Se[j]=Mx[j]; Mx[j]=x;
}
else if(x>Se[j]) Se[j]=x;
}
}
ans=;
for(int i=;i<maxn;i++) ans=max(ans,(long long)i*Mx[i]*Se[i]);
printf("%lld\n",ans);
}
return ;
}
也可以利用高维前缀和来维护最大次大值。1586ms。
(目前见到的三种:高维前缀和维护了X集之和,位置的最小值,最大次大值。ORZ
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=<<;
int Mx[maxn+],Se[maxn+]; ll ans;
int main()
{
int T,N,x;
scanf("%d",&T);
while(T--){
memset(Mx,,sizeof(Mx));
memset(Se,,sizeof(Se));
scanf("%d",&N);
for(int i=;i<=N;i++){
scanf("%d",&x);
if(x>Mx[x]) Mx[x]=x;
else Se[x]=x;
}
for(int i=;i<;i++){
for(int j=;j<maxn;j++){
if(!(j&(<<i))){
if(Mx[j|(<<i)]>=Mx[j]){
Se[j]=max(Mx[j],Se[j|(<<i)]);
Mx[j]=Mx[j|(<<i)];
}
else Se[j]=max(Mx[j|(<<i)],Se[j]);
}
}
}
ans=;
for(int i=;i<maxn;i++) ans=max(ans,(ll)i*Mx[i]*Se[i]);
printf("%lld\n",ans);
}
return ;
}
HihoCoder - 1496:寻找最大值(高维前缀和||手动求子集)的更多相关文章
- Hihocoder 1496 寻找最大值(状态压缩 + 高位前缀和)
题目链接 Hiho 1496 设$f[i]$为二进制集合包含$i$的最大的两个数,这个东西用高维前缀和维护. 高位前缀和转移的具体方案 :枚举每一位,然后枚举每个集合,大的转移到小的. 注意合并的时 ...
- hihocoder 1496 寻找最大值
题解: 注意到$ai$只有$1e6$这件事情肯定要枚举和这个有关的东西 考虑枚举$ai\&aj$的值就可以了 那么这个集合一定是ai,aj的子集 于是我们对每个集合从大到小枚举丢掉一位转移就行 ...
- hihocoder 1496 寻找最大值(高维前缀最大次大值)
[题目链接] https://hihocoder.com/problemset/problem/1496 [题目大意] 给定N个数A1, A2, A3, ... AN, 从中找到两个数Ai和Aj(i≠ ...
- BZOJ:5092 [Lydsy1711月赛]分割序列(贪心&高维前缀和)
Description 对于一个长度为n的非负整数序列b_1,b_2,...,b_n,定义这个序列的能量为:f(b)=max{i=0,1,...,n}((b_1 xor b _2 xor...xor ...
- HihoCoder 1496:寻找最大值(思维DP)
http://hihocoder.com/problemset/problem/1496 题意:中文. 思路:一开始做有一种想法,把所有的数都变成二进制后,最优的情况肯定是挑选所有数中最高位的1能同时 ...
- LOJ2542 PKUWC2018 随机游走 min-max容斥、树上高斯消元、高维前缀和、期望
传送门 那么除了D1T3,PKUWC2018就更完了(斗地主这种全场0分的题怎么会做啊) 发现我们要求的是所有点中到达时间的最大值的期望,\(n\)又很小,考虑min-max容斥 那么我们要求从\(x ...
- Luogu3175 HAOI2015 按位或 min-max容斥、高维前缀和、期望
传送门 套路题 看到\(n \leq 20\),又看到我们求的是最后出现的位置出现的时间的期望,也就是集合中最大值的期望,考虑min-max容斥. 由\(E(max(S)) = \sum\limits ...
- hihocoder1496(高维前缀和)
题意:给定N个数A1, A2, A3, ... AN,小Ho想从中找到两个数Ai和Aj(i ≠ j)使得乘积Ai × Aj × (Ai AND Aj)最大.其中AND是按位与操作. 第一行一个整数N( ...
- [luogu 3175] [HAOI2015]按位或(min-max容斥+高维前缀和)
[luogu 3175] [HAOI2015]按位或 题面 刚开始你有一个数字0,每一秒钟你会随机选择一个[0,2^n-1]的数字,与你手上的数字进行按位或运算.问期望多少秒后,你手上的数字变成2^n ...
随机推荐
- UVa 11354 邦德(最小瓶颈路+LCA)
https://vjudge.net/problem/UVA-11354 题意: 有n个城市m条道路,每条道路有一个危险系数.先在有若干个询问,要求找到一条从s到t的路,使得途径所有边的最大危险系数最 ...
- eclipse创建文件package,source folder和folder区别及相互转换
原文:http://blog.csdn.net/u014079773/article/details/66973910 https://www.cnblogs.com/shihaiming/p/735 ...
- 用Hibernate框架把hql生成可执行的sql语句-Oracle方言
引言:为什么这样的需求,源自公司项目需要,公司的项目使用java的struts2+spring2.5+oracle中间件tuxedo,数据库用的是Oracle,但由于不直接连接数据库,用中间件处理的方 ...
- jQuery全局冲突案例,解决$.noConflict()
如图:犹豫$在js中可以作为一个变量去定义,所以在引入jQuery包之前定义了$对象,那么,在引入jQuery包之后就不能使用$对象了 解决:使用$.noConflict()她可以返回一个对象,这个对 ...
- NVML查询显卡信息
前段时间做英伟达硬解得时候,显卡总是莫名挂掉,后来发现是因为显卡温度过高掉了.这几天找到CUDA中有NVML工具可以查看显卡信息,nvidia-smi也是基于这个工具包. 使用的CUDA版本为CUDA ...
- nyoj993——容斥
How many integers can you find 时间限制:1000 ms | 内存限制:65535 KB 难度:1 描述 给你三个数,n,m1,m2,找出所有小于n的能被m1或m ...
- 11g OCM自动打补丁
1.先替换掉OPatch软件 每个实例都要运行 GRID_HOME和ORACLE_HOME的OPatch目录都去除掉 把OPatch软件p6880880_112000_Linux-x86-64.zip ...
- laravel中新建文件并保存数据到文件中
//base_path()获取当前的绝对路径 $path=base_path().'\config\web.php'; $str='abcdefg'; //要声明的字符串 file_put_conte ...
- vue 插件(Sublime Text 3 常用插件以及安装方法)(转)
使用Package Control组件安装 也可以安装package control组件,然后直接在线安装:按Ctrl+` 调出console粘贴以下代码到底部命令行并回车: { import url ...
- L155
Wireless Festival has been given permission to remain in London's Finsbury Park, provided performers ...