DescriptionDescriptionDescription

给定权值和键值,求相邻键值不互质且满足二叉查找树性质的最大sumsumsum和

数据范围:n≤300n\leq 300n≤300


SolutionSolutionSolution

首先按照键值排序,容易知道这必然是这棵树的中序遍历

接下来做区间dpdpdp,提点出来,左右分别做左右子树并计算答案

时间复杂度:O(n3)O(n^3)O(n3)


CodeCodeCode

#include<cstdio>
#include<cctype>
#include<algorithm>
#define LL long long
using namespace std;int n,root;
struct node{LL key;int val;}a[301];
inline LL gcd(LL x,LL y){return y?gcd(y,x%y):x;}
inline bool cmp(node x,node y){return x.key<y.key;}
bool ok[301][301];
LL ans=-1,f[301][301],s[301];
inline LL read()
{LL f=0,d=1;char c; while(c=getchar(),!isdigit(c)) if(c=='-') d=-1;f=(f<<3)+(f<<1)+c-48;while(c=getchar(),isdigit(c)) f=(f<<3)+(f<<1)+c-48;return d*f;
}
signed main()
{freopen("tree.in","r",stdin);freopen("tree.out","w",stdout);n=read();for(register int i=1;i<=n;i++) a[i].key=read(),a[i].val=read();sort(a+1,a+1+n,cmp);for(register int i=1;i<n;i++) for(register int j=i+1;j<=n;j++) ok[j][i]=ok[i][j]=gcd(a[i].key,a[j].key)>1,f[i][j]=f[j][i]=-0x3f3f3f3f;for(register int i=1;i<=n;i++) s[i]=s[i-1]+a[i].val;for(register int i=1;i<=n;i++)for(register int k=i;k;k--)for(register int j=k;j<=i;j++){ if(ok[i][j]) f[i][k]=max(f[i][k],f[j][k]+f[j][i-1]+s[i-1]-s[k-1]);if(ok[j][k]) f[k][i]=max(f[k][i],f[j][k+1]+f[j][i]+s[i]-s[k]);} for(register int i=1;i<=n;i++) ans=max(ans,f[i][1]+f[i][n]+s[n]);printf("%lld",ans);
}

JZOJ 6287. 2019.08.09【NOIP提高组A】扭动的树相关推荐

  1. 2018.12.08【NOIP提高组】模拟B组总结(未完成)

    2018.12.08[NOIP提高组]模拟B组总结 diyiti 保留道路 进化序列 B diyiti Description 给定n 根直的木棍,要从中选出6 根木棍,满足:能用这6 根木棍拼出一个 ...

  2. 2020.08.08【NOIP提高组】模拟:奶牛的图片 总结

    2020.08.08[NOIP提高组]模拟:奶牛的图片 总结 Description Farmer John希望给他的 N ( 1 ≤ N ≤ 100 , 000 ) N(1\leq N\leq100 ...

  3. 6271. 2019.8.4【NOIP提高组A】锻造 (forging)

    6271. 2019.8.4[NOIP提高组A]锻造 (forging)  (File IO): input:forging.in output:forging.out Time Limits: 15 ...

  4. 第一届『Citric杯』NOIP提高组模拟赛 题解

    [官方题解]第一届『Citric杯』NOIP提高组模拟赛 题解 第一题 柠檬超市 这题是本次模拟赛的送分题.做法显然. 但是注意此题有一个陷阱: 注意W和C的规模都是10^9,所以如果直接用doubl ...

  5. HighNewTech:2019.08.09程序猿界大事件之【你好,我是鸿蒙OS】~【来了,老弟】—技术才是硬道理,开源方能建立新生态!

    High&NewTech:2019.08.09程序猿界大事件之[你好,我是鸿蒙OS]~[来了,老弟]-技术才是硬道理,开源方能建立新生态! 导读       2019华为开发者大会在今日举行, ...

  6. 津津的储蓄计划 NOIp提高组2004

    这个题目当年困扰了我许久,现在来反思一下 本文为博客园ShyButHandsome的原创作品,转载请注明出处 右边有目录,方便快速浏览 题目描述 津津的零花钱一直都是自己管理.每个月的月初妈妈给津津\ ...

  7. 2021.08.09【普及组】模拟赛C组比赛总结

    文章目录 2021.08.09[普及组]模拟赛C组比赛总结 写在前面: T1 :[普及模拟]生产武器 题目大意: 正解: T2 :[普及模拟]城市连接 题目大意: 正解: T3 :[普及模拟]抢救文件 ...

  8. 信息学奥赛一本通(C++版)NOIP提高组(1820-1829)

    信息学奥赛一本通(C++版)NOIP提高组目录 //1820 [题目描述] 我们可以用这样的方式来表示一个十进制数:将每个阿拉伯数字乘以一个以该数字所 处位置的(值减1)为指数,以10为底数的幂之和的 ...

  9. {小结}2016.6.11【初中部 NOIP提高组 】模拟赛C

    2016.6.11[初中部 NOIP提高组 ]模拟赛C No.1!!! 100+33.3+10+90=233.3 23333 1298. 牛棚(graze2.pas/c/cpp) 题解 1299. 洗 ...

最新文章

  1. 分享:个人是怎么学习新知识的
  2. hp优盘启动盘格式化工具_启动盘——拯救你电脑的利器
  3. USB学习6---Linux Android USB软件架构设计
  4. win7安装python2.7_python学习(3)-win7安装python2.7
  5. Regex Tester (免费有用)
  6. OpenGL次表面散射
  7. centos yum安装_centos7上yum安装碰到的坑
  8. 确保PHP安全 不能违反的四条安全规则
  9. Java案例:使用clone()方法克隆对象
  10. oracle 查看 统计更新时间,oracle查看和更新统计表的信息
  11. Java基础笔记(一)
  12. 在VS2010进行MFC编程设置字符集的问题(使用多字节字符集引起错误)
  13. 走火入魔.NET从C/S单点登录到B/S系统的例子,SUID(System Unique Identification)
  14. CSS选择器优先级排列
  15. python实现空气焓值,湿球温度的计算
  16. html方式判断IE版本
  17. 【上汽零束SOA】云管端一体化SOA软件平台系列介绍之四:车云一体架构篇
  18. 谷歌浏览器插件自动点击程序
  19. 全国电费余额查询API接口
  20. 王二 设计模式读书笔记

热门文章

  1. proc_create的使用方法
  2. 千亿智能家居赛道,为什么渗透率却不足5%?
  3. springcloud 项目maven依赖:Failure to find org.springframework.cloud:spring-cloud-dependencies
  4. cocos2d-x 图片纹理优化 资源加载方案
  5. vs工程中哪些文件可以删除
  6. 微信小程序-开发入门(一)
  7. JavaScript进阶
  8. echarts3 使用((绘制各种图表,地图))
  9. 基于asp.net校园二手物品交易平台-计算机毕业设计
  10. 综合业务数字网(ISDN)--网络大典