description


analysis

  • 区间DPDPDP,首先按照键值排个序,这样保证树的中序遍历就为原序列

  • 设f[0][i][j]f[0][i][j]f[0][i][j]表示[i..j][i..j][i..j]区间作为[unknown..i−1][unknown..i-1][unknown..i−1]的右儿子的最大和,f[1][i][j]f[1][i][j]f[1][i][j]就是[i..j][i..j][i..j]区间作为[j+1..unknown][j+1..unknown][j+1..unknown]的左儿子

  • 预处理fff的初值是很明显的,然后O(n2log)O(n^2log)O(n2log)预处理出两两数之间的gcd⁡\gcdgcd

  • 对于一段区间[i..j][i..j][i..j],枚举中转点kkk,表示[i..k−1],[k+1,j][i..k-1],[k+1,j][i..k−1],[k+1,j]分别作为kkk的左右儿子

  • k=ik=ik=i或k=jk=jk=j特殊转移,i&lt;k&lt;ji&lt;k&lt;ji<k<j可知[i..j][i..j][i..j]可由f[1][i][k−1],f[0][k+1][j]f[1][i][k-1],f[0][k+1][j]f[1][i][k−1],f[0][k+1][j]转移得到

  • 具体转移到000或111取决于a[k]a[k]a[k]与a[i−1],a[j+1]a[i-1],a[j+1]a[i−1],a[j+1]是否符合条件(gcd⁡&gt;1\gcd&gt;1gcd>1)


code

#pragma GCC optimize("O3")
#pragma G++ optimize("O3")
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<vector>
#define MAXN 305
#define INF 1000000007
#define ll long long
#define reg register ll
#define fo(i,a,b) for (reg i=a;i<=b;++i)
#define fd(i,a,b) for (reg i=a;i>=b;--i)using namespace std;ll f[2][MAXN][MAXN];
ll g[MAXN][MAXN];
ll sum[MAXN];
ll n,ans=-INF;struct node
{ll x,y;
}a[MAXN];inline ll read()
{ll x=0,f=1;char ch=getchar();while (ch<'0' || '9'<ch){if (ch=='-')f=-1;ch=getchar();}while ('0'<=ch && ch<='9')x=x*10+ch-'0',ch=getchar();return x*f;
}
inline ll max(ll x,ll y){return x>y?x:y;}
inline bool cmp(node a,node b){return a.x<b.x;}
inline ll get(ll x,ll y){return sum[y]-sum[x-1];}
inline ll gcd(ll x,ll y){return x%y==0?y:gcd(y,x%y);}
int main()
{freopen("T2.in","r",stdin);//freopen("tree.in","r",stdin);//freopen("tree.out","w",stdout);n=read();fo(i,0,n)fo(j,0,n)f[0][i][j]=f[1][i][j]=-INF;fo(i,1,n)a[i].x=read(),a[i].y=read();sort(a+1,a+n+1,cmp);fo(i,1,n)fo(j,1,n)g[i][j]=gcd(a[i].x,a[j].x);fo(i,1,n){sum[i]=sum[i-1]+a[i].y;if (i!=1 && g[i][i-1]>1)f[0][i][i]=a[i].y;if (i!=n && g[i][i+1]>1)f[1][i][i]=a[i].y;}fo(len,2,n){fo(i,1,n-len+1){ll j=i+len-1,tmp;fo(k,i,j){if (k==i)tmp=f[0][i+1][j]+get(i,j);else if (k==j)tmp=f[1][i][j-1]+get(i,j);else tmp=f[1][i][k-1]+f[0][k+1][j]+get(i,j);if (i!=1 && g[k][i-1]>1)f[0][i][j]=max(f[0][i][j],tmp);if (j!=n && g[k][j+1]>1)f[1][i][j]=max(f[1][i][j],tmp);if (n==len)ans=max(ans,tmp);}}}printf("%lld\n",ans<0?-1ll:ans);return 0;
}

【JZOJ6287】扭动的树相关推荐

  1. JZOJ 6287. 2019.08.09【NOIP提高组A】扭动的树

    DescriptionDescriptionDescription 给定权值和键值,求相邻键值不互质且满足二叉查找树性质的最大sumsumsum和 数据范围:n≤300n\leq 300n≤300 S ...

  2. 欢乐纪中A组赛【2019.8.9】

    前言 在短暂的比赛时间中,我发现本菜鸡越是功于心计想ACACAC,越是拿不到分,所以... 我不写比赛了JOJO!JOJO!JOJO! 成绩 JJJ表示初中,HHH表示高中后面加的是几年级 RankR ...

  3. 2022.7.11~8.1纪中游记

    Day 0 上午开始最后的拼搏! 结果下午一点就要走. 来到纪中发现宿舍换了,换的贼远,走路都要几分钟.饭堂小卖部也不如以前,什么都没了,估计是什么牛马投诉. 不知道校门外的小卖部还在不在. 晚上选组 ...

  4. 波士顿动力Spot mini,MIT猎豹、宇树科技、蔚蓝等几家公司产品的介绍

    1.波士顿动力Spotmini Spot 是 2015 年 2 月发布的四足机器人,重量约为 75 公斤,可背负 45 公斤的有效负载进行自由行动或奔跑.Spot 采用激光雷达传感器和立体视觉传感器感 ...

  5. 判断两个树是否相等和判断tree1是否包含tree2 python实现

    判断两个树是否相等 def equal(node_a, node_b):"""判断两个树是否相等:param node_a: :param node_b: :return ...

  6. 论文溯源树AMiner

    来自 DBLP.ArXiv.STM 等多家学术出版机构和平台的数据表明,在过去 20 年间,计算机科学.物理学.统计学等研究领域的出版物总量都有大幅增加.像 CVPR.AAAI 等有关人工智能等新兴领 ...

  7. Python---哈夫曼树---Huffman Tree

    今天要讲的是天才哈夫曼的哈夫曼编码,这是树形数据结构的一个典型应用. !!!敲黑板!!!哈夫曼树的构建以及编码方式将是我们的学习重点. 老方式,代码+解释,手把手教你Python完成哈夫曼编码的全过程 ...

  8. 深度树匹配模型(TDM)

    深度树匹配模型(TDM) 算法介绍 Tree-based Deep Match(TDM)是由阿里妈妈精准定向广告算法团队自主研发,基于深度学习上的大规模(千万级+)推荐系统算法框架.在大规模推荐系统的 ...

  9. 洛谷 P5057 [CQOI2006]简单题(树状数组)

    嗯... 题目链接:https://www.luogu.org/problem/P5057 首先发现这道题中只有0和1,所以肯定与二进制有关.然后发现这道题需要支持区间更改和单点查询操作,所以首先想到 ...

  10. 二逼平衡树——树套树(线段树套Splay平衡树)

    题面 Bzoj3196 解析 线段树和Splay两棵树套在一起,常数直逼inf,但最终侥幸过了 思路还是比较简单, 在原数组维护一个下标线段树,再在每一个线段树节点,维护一个对应区间的权值Splay. ...

最新文章

  1. Vue教程5【vuex】getters,mapState,mapGetters,mapActions,mapMutations,模块化namespace
  2. VC++ CopyFile函数使用方法
  3. 华为手机下拉菜单变大_不能不知的华为手机菜单栏,知道3个的算你手机没白买!...
  4. 试题 G: 外卖店优先级 第十届蓝桥杯
  5. 不要一辈子靠技术生存!!
  6. Python:file (read,readline,readline )使用方法
  7. 中高级数论 [欧拉函数线性筛,二次剩余]
  8. Spring [CVE-2022-22965]漏洞处理
  9. 机器学习的重新思考:人工智能如何学习“失忆”?
  10. Swift中文教程(三) 字符串和字符
  11. 三方支付 微信支付 支付宝支付 银联支付 分享
  12. 大学生性价比计算机推荐,2018大学生笔记本推荐_良心笔记本推荐【性价比之王】-太平洋电脑网...
  13. 四十八种微信公众号加人方法
  14. Java中的成员变量和局部变量
  15. switch语句表达式和执行流程
  16. 【调色台】达芬奇调色台系列
  17. MySql 如何查询某一天内的数据
  18. hashCode()和哈希值
  19. 使用css3和tween.js二种方式实现照片翻转
  20. 使用路由器后,上网速度比较慢(下载慢、延迟大)?

热门文章

  1. 跨境电商亚马逊ERP之如何选择好用的ERP软件
  2. w10计算机名重新启动此计算机后,win10电脑关机后自动重启怎么回事?原因与解决办法...
  3. JS事件之事件类型[鼠标和滚轮事件]
  4. 最小二乘法 几何意义
  5. 用大数据感知美德的力量
  6. 我的团长我的团第二十七集
  7. 删除回收站右键找回清空的文件
  8. 学习方法——TRIZ创新理论中的八大法则
  9. Mac谷歌浏览器添加JSONView的插件以提高开发的效率
  10. WDF驱动简介及几个驱动对象介绍