I love max and multiply HDU - 6971

题意:

数组a和b,现在构造一个数组c,使得c[k]=max(a[i] * b[j]) , i&j>=k
求数组c的和

题解:

我们可以考虑求出所有Dk=max(Ai * Bj)并满足i&j=k,然后再从后向前取,但是i&j=k不好求,那就改成Dk=max(Ai * Bj),满足k∈i&j
k∈i&j,我们可以分别求k∈i和k∈j的情况
就比如:
k = 1010,k∈i&j,
i&j可以是:
1010
1011
1110
1111
那么我们就让i和j分别取这几个值求最大值,因为题目中存在负数,负数乘负数可能值更大,所以我们同时记录Ai和Bj的最大值和最小值
在代码实现中,当我们循环到1010,我们就将其值赋给其子集,这样就实现了k属于i&j
最后记得从后向前取最大(为什么还要这步呢?就比如k=1010,我们当前得到的最大值是1010所属于的集合,但是有些集合大于k但是k不属于,如果i<j,那么j的集合一定大于i,所以j的集合也是满足i的条件的,反之不一定,所以倒着赋值)

代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int,int> PII;const int N=1000010,mod=998244353,INF=0x3f3f3f3f;
const double eps=1e-6;int n;
int a[N],b[N];
LL mx1[N],mx2[N],mi1[N],mi2[N],c[N];
void solve(){scanf("%d",&n);for(int i=0;i<n;i++) scanf("%d",&a[i]);for(int i=0;i<n;i++) scanf("%d",&b[i]);int all=(int)log2(n)+1;for(int i=0;i<1<<all;i++) {mx1[i]=mx2[i]=-INF;mi1[i]=mi2[i]=INF;c[i]=-1e18;}for(int i=0;i<n;i++) mx1[i]=mi1[i]=a[i];for(int i=0;i<n;i++) mx2[i]=mi2[i]=b[i];for(int i=0;i<all;i++) {for(int j=0;j<1<<all;j++) {if(j>>i&1) {mx1[j^(1<<i)]=max(mx1[j^(1<<i)],mx1[j]);}}}for(int i=0;i<all;i++) {for(int j=0;j<1<<all;j++) {if(j>>i&1) {mi1[j^(1<<i)]=min(mx1[j^(1<<i)],mx1[j]);}}}for(int i=0;i<all;i++) {for(int j=0;j<1<<all;j++) {if(j>>i&1) {mx2[j^(1<<i)]=max(mx2[j^(1<<i)],mx2[j]);}}}for(int i=0;i<all;i++) {for(int j=0;j<1<<all;j++) {if(j>>i&1) {mi2[j^(1<<i)]=min(mi2[j^(1<<i)],mi2[j]);}}}LL now=1ll*INF*INF;for(int i=0;i<n;i++) {if(mx1[i]!=INF&&mx2[i]!=INF) c[i]=max(c[i],mx1[i]*mx2[i]);if(mi1[i]!=-INF&&mi2[i]!=-INF) c[i]=max(c[i],mi1[i]*mi2[i]); if(mx1[i]!=INF&&mi2[i]!=-INF) c[i]=max(c[i],mx1[i]*mi2[i]);if(mi1[i]!=-INF&&mx2[i]!=INF) c[i]=max(c[i],mi1[i]*mx2[i]);}for(int i=n-2;i>=0;i--) c[i]=max(c[i],c[i+1]);LL ans=0;for(int i=0;i<n;i++) ans+=c[i]%mod,ans+=mod,ans%=mod;printf("%lld\n",ans);
}
int main()
{int T; scanf("%d",&T);while(T--) {solve();   }return 0;
}

I love max and multiply HDU - 6971(详细解答)相关推荐

  1. HDU - 6971 K - I love max and multiply sosdp

    传送门 文章目录 题意: 思路: 题意: 思路: 直接求i&j>=ki\And j>=ki&j>=k不是很好求,所以转换成i&j=ki\And j=ki&am ...

  2. 2021“MINIEYE杯”中国大学生算法设计超级联赛(2)I love max and multiply(转化)

    I love max and multiply Code 代码抄的std #include<bits/stdc++.h> using namespace std; using ll=lon ...

  3. 2020年高教社杯全国大学生数学建模竞赛C题 第一问详细解答+代码

    2020年高教社杯全国大学生数学建模竞赛C题 第一问详细解答+代码 本文摘自小编自己的参赛论文与经历,小编获得了2020年高教社杯国奖,有问题的同学们可私聊博主哦. 1. 问题分析 问题一主要围绕信贷 ...

  4. 背包算法(一)-01背包-史上最详细解答

    背包算法(一)-01背包-史上最详细解答 1. 题目 2. 分析 2.1 状态表示 2.2 状态计算 3. 实现 4. 优化 5. 测试 1. 题目 问题描述:有n件物品和容量为m的背包,给出i件物品 ...

  5. C语言动态规划法解决0/1背包问题(详细解答)

    动态规划法解决0/1背包问题(详细解答) 首先让我们回顾一下动态规划法的使用规则: 一..动态规划法的实现思路: 1.划分子问题:将元问题分解为若干个子问题,每一个子问题对应一个决策,并且子问题之间具 ...

  6. pandas.get_dummies函数用法详细解答(实践)

    pandas.get_dummies函数用法详细解答(实践) pandas.get_dummies函数用法详细解答(实践)_skywf的博客-CSDN博客 one-hot encoding one-h ...

  7. 校招社招必备核心前端面试问题与详细解答

    本文总结了前端老司机经常问题的一些问题并结合个人总结给出了比较详尽的答案.网易阿里腾讯校招社招必备知识点. 原理讲解参考:前端增长-重新定义大前端 在线课程:网易云课堂课程      思否课堂 官方博 ...

  8. 2021年 第13届 全国大学生数学竞赛 初赛(非数学类)试题详细解答

    [2020年第12届全国大学生数学竞赛--资源分享 ][1~11届省赛决赛考题及题解(数学类.非数学类).推荐学习网址.复习备考书籍推荐] 2019年 第11届 全国大学生数学竞赛 初赛(非数学类)试 ...

  9. c语言加法结合性,C语言 运算符 的结合性 怎么理解?求举例子详细解答!!

    C语言 运算符 的结合性 怎么理解?求举例子详细解答!! 关注:284  答案:5  信息版本:手机版 解决时间 2019-01-11 21:03 战魂 2019-01-11 10:01 C语言 运算 ...

最新文章

  1. buu 权限获得第一步
  2. 重构老系统遗留代码的一些方法学习笔记
  3. UVA3942 Remember the Word
  4. 在Ubuntu8.04上简单定制个性化的Terminal操作界面
  5. CE3和UE3在多线程渲染方面的简单对比
  6. Linux进程控制与进程优先级
  7. mysql中int 5_mysql中int(x)与int以及varchar与char的区别_HelloWorld_ty的博客-CSDN博客
  8. HTTP长连接和短连接原理浅析
  9. 3.RESTful Web APIs中文版 --- 资源和表述
  10. 2D曲线插值拟合基础
  11. Django作为微信小程序后端实践
  12. 8、乐趣国学—“不迁怒,不贰过”
  13. JVM常见面试题汇总笔记
  14. 三十九、如何单独发布jar包
  15. L1、L2正则regularization和weight decay
  16. 身高预测_大部分都很准哦
  17. 开机provision应用
  18. 深入理解java虚拟机-第三版-周明志 Java虚拟机规范(java se 8) pdf
  19. android m4a播放器,如何在android上解码m4a音频
  20. 零基础带你Ubuntu20.04安装Rosbridge并操作测试小乌龟,手把手教学【超级详细】

热门文章

  1. 真是个狠人!开学第一天,这批小学生的造型刷爆朋友圈!
  2. 14个超有料的优质公众号,关注了就舍不得删
  3. python浪漫代码_五行Python代码实现批量抠图
  4. 因为我把JMM原理讲解了一遍,这给足了我涨薪的底气!
  5. mindray心电监护仪使用说明_怎么看监护仪上的参数
  6. python中闭包不是立刻执行_一道神奇的Python面试题,你会吗?
  7. java类同步_Java中方法,对象,类的同步
  8. java 数组 树_java使用顺序数组实现二叉树
  9. 763. 划分字母区间009(贪心算法+思路+详解+图示)
  10. [Redis6]新数据类型_Geospatial