关注
由于同时和a[j]和j有关所以不能单纯维护当作斜率相关的问题来做
本问题是经典的决策单调性问题。
考虑我们选择j时如果j1>j2且a[j1]>a[j2]显然j2时候不如j1,因此我们用单调队列筛掉这些不符合条件的j2,最后得到一个单调下降子序列。
同理,选择i时如果i1<i2且a[i1]>a[i2]显然i2时候不如i1,帅选后i的选择区域也将在一个单调上升子序列中。
现在在一个单调上升子序列中选择i,一个单调下降子序列中选择j。
接下来考虑j对i1和i2的值f(i1,j)=(A[i1]+A[j])*(j-i1),f(i2,j)=(A[i2]+A[j])*(j-i2)作差
不妨设i1>i2
f(i1,j)-f(i2,j)=j*(A[i1]-A[i2])-(A[i1]*i1-A[i2]*i2)-A[j]*(i1-i2)
=(A[i1]-A[i2],i1-i2)·(j,-a[j])-(A[i1]*i1-A[i2]*i2)
显然,随着j的增大f(i1,j)-f(i2,j)单调递增,也就是说,对于任意i1,i2存在一个在j0之后
(f(i1,j)-f(i2,j))*(j-j0)>=0
故我们在i待选择的单调上升子序列中的每个相邻元素计算其分界的j即可。具体实现就是用一个单调栈维护每个分界点,每次对相邻两个元素二分其分界点,然后维护单调栈。
1.得到i的候选序列I={i1,i2...ip}
2.得到j的候选序列J={j1,j2...jq}
3.初始单调栈s为空
4.枚举x,根据f(ix,j)-f(ix+1,j)的算出分界点jx,将jx比栈顶元素小,不断把元素踢出,然后加入jx
5.根据单调栈中的元素,得到每个序列J最优的决策ix,计算,并求最大值。
PS:这个问题转化称这样可能更好理解,二维的点集A={(i,a[i])},B={(i,-a[i])},在A中取一个点,在B中取一个点,最后要求其面积最大,当然最后做法本质没区别
查看原帖
3 2
相关推荐
02-25 16:29
齐鲁工业大学 golang
找工作勤劳小蜜蜂:自我描述部分太差,完全看不出想从事什么行业什么岗位,也看不出想在哪个地区发展,这样 会让HR很犹豫,从而把你简历否决掉。现在企业都很注重员工稳定性和专注性,特别对于热爱本行业的员工。
你实习的工作又太传统的it开发(老旧),这部分公司已经趋于被淘汰,新兴的互联网服务业,比如物流,电商,新传媒,游戏开发和传统的It开发有天然区别。不是说传统It开发不行,而是就业岗位太少,基本趋于饱和,很多老骨头还能坚持,不需要新血液。
工作区域(比如长三角,珠三角,成渝)等也是HR考虑的因素之一,也是要你有个坚定的决心。否则去几天,人跑了,HR会被用人单位骂死。 点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# AI面会问哪些问题? #
20093次浏览 410人参与
# 投递几十家公司,到现在0offer,大家都一样吗 #
338253次浏览 2145人参与
# 米连集团26产品管培生项目 #
12526次浏览 284人参与
# 你的实习产出是真实的还是包装的? #
16680次浏览 311人参与
# 通信硬件2023笔面经 #
50367次浏览 304人参与
# 一张图晒出你司的标语 #
3136次浏览 62人参与
# 厦门银行科技岗值不值得投 #
6686次浏览 164人参与
# 蔚来求职进展汇总 #
117004次浏览 794人参与
# 找AI工作可以去哪些公司? #
5566次浏览 139人参与
# 从事AI岗需要掌握哪些技术栈? #
5864次浏览 183人参与
# 你做过最难的笔试是哪家公司 #
23867次浏览 143人参与
# 春招至今,你的战绩如何? #
53051次浏览 486人参与
# 沪漂/北漂你觉得哪个更苦? #
8069次浏览 173人参与
# 聊聊这家公司值得去吗 #
914383次浏览 4736人参与
# AI时代,哪个岗位还有“活路” #
9289次浏览 292人参与
# 长得好看会提高面试通过率吗? #
19863次浏览 233人参与
# 阿里笔试 #
172043次浏览 1253人参与
# HR最不可信的一句话是__ #
4781次浏览 97人参与
# 春招你拿到offer了吗 #
826675次浏览 9971人参与
# 学历对求职的影响 #
660375次浏览 4231人参与
# 应届生初入职场,求建议 #
318168次浏览 2895人参与
# 实习的你做了哪些离谱的工作 #
38721次浏览 253人参与
查看9道真题和解析