【JZOJ6287】扭动的树
description

analysis
区间\(DP\),首先按照键值排个序,这样保证树的中序遍历就为原序列
设\(f[0][i][j]\)表示\([i..j]\)区间作为\([unknown..i-1]\)的右儿子的最大和,\(f[1][i][j]\)就是\([i..j]\)区间作为\([j+1..unknown]\)的左儿子
预处理\(f\)的初值是很明显的,然后\(O(n^2log)\)预处理出两两数之间的\(\gcd\)
对于一段区间\([i..j]\),枚举中转点\(k\),表示\([i..k-1],[k+1,j]\)分别作为\(k\)的左右儿子
\(k=i\)或\(k=j\)特殊转移,\(i<k<j\)可知\([i..j]\)可由\(f[1][i][k-1],f[0][k+1][j]\)转移得到
具体转移到\(0\)或\(1\)取决于\(a[k]\)与\(a[i-1],a[j+1]\)是否符合条件(\(\gcd>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】扭动的树的更多相关文章
- test20180922 扭动的树
题意 分析 二叉查找树按照键值排序的本质是中序遍历,每次我们可以在当前区间中提取出一个根,然后划分为两个子区间做区间DP.记\(f(i,j,k)\)表示区间[i, j]建子树,子树根节点的父亲是第k个 ...
- NOIp2018集训test-9-22(am/pm) (联考三day1/day2)
szzq学长出的题,先orz一下. day1 倾斜的线 做过差不多的题,写在我自己的博客里,我却忘得一干二净,反而李巨记得清清楚楚我写了的. 题目就是要最小化这个东西 $|\frac{y_i-y_j} ...
- B树——算法导论(25)
B树 1. 简介 在之前我们学习了红黑树,今天再学习一种树--B树.它与红黑树有许多类似的地方,比如都是平衡搜索树,但它们在功能和结构上却有较大的差别. 从功能上看,B树是为磁盘或其他存储设备设计的, ...
- ASP.NET Aries 入门开发教程8:树型列表及自定义右键菜单
前言: 前面几篇重点都在讲普通列表的相关操作. 本篇主要讲树型列表的操作. 框架在设计时,已经把树型列表和普通列表全面统一了操作,用法几乎是一致的. 下面介绍一些差距化的内容: 1:树型列表绑定: v ...
- 再讲IQueryable<T>,揭开表达式树的神秘面纱
接上篇<先说IEnumerable,我们每天用的foreach你真的懂它吗?> 最近园子里定制自己的orm那是一个风生水起,感觉不整个自己的orm都不好意思继续混博客园了(开个玩笑).那么 ...
- HDU1671——前缀树的一点感触
题目http://acm.hdu.edu.cn/showproblem.php?pid=1671 题目本身不难,一棵前缀树OK,但是前两次提交都没有成功. 第一次Memory Limit Exceed ...
- 算法与数据结构(十一) 平衡二叉树(AVL树)
今天的博客是在上一篇博客的基础上进行的延伸.上一篇博客我们主要聊了二叉排序树,详情请戳<二叉排序树的查找.插入与删除>.本篇博客我们就在二叉排序树的基础上来聊聊平衡二叉树,也叫AVL树,A ...
- [C#] C# 知识回顾 - 表达式树 Expression Trees
C# 知识回顾 - 表达式树 Expression Trees 目录 简介 Lambda 表达式创建表达式树 API 创建表达式树 解析表达式树 表达式树的永久性 编译表达式树 执行表达式树 修改表达 ...
- bzoj3207--Hash+主席树
题目大意: 给定一个n个数的序列和m个询问(n,m<=100000)和k,每个询问包含k+2个数字:l,r,b[1],b[2]...b[k],要求输出b[1]~b[k]在[l,r]中是否出现. ...
随机推荐
- uoj#244. 【UER #7】短路
题目 orz myy 这个矩形对称的性质非常优美,所以我们只需要考虑一个\(\frac{1}{4}\)的矩阵,即一个倒三角形 现在我们要求的是从\((1,1)\)到三角形对边上每个点的最短路,不难发现 ...
- 【牛客提高训练营5A】同余方程
题目 吉老师的题做不动啊 首先\([l_1,r_1],[l_2,r_2]\)并不是非常好做,我们考虑将其拆成前缀信息 设\(solve(n,m)=\sum_{i=0}^n\sum_{j=0}^m[m| ...
- mac 常使用的一些小技巧
全选 command +A 剪切 command + x 复制 ommand + c 粘贴 command + v 撤销 command + z 聚焦搜索 command + 空格 退出全屏窗口 Co ...
- Linux文件介绍
Linux文件介绍 Linux 文件属性 可以通过命令ll+文件名,查看文件的具体属性 例如:ll syz.gz 1736706 -rw-r--r--. 1 root root 28 Oct 27 1 ...
- debug breakpoint with maven in eclipse
- 微信小程序开发显示城市天气
本案例实现动态显示城市天气的功能,案例效果如下: 首先分析制作的思路: 1.在app.json文件的pages数组里加上main文件夹和template(模板)文件夹的路径. 2.在main.js文件 ...
- JAVA里面的int类型 和Integer类型,有什么不一样
JAVA里面的int类型 和Integer类型,有什么不一样 原创 2013年09月04日 23:15:11 标签: java / 2120 编辑 删除 JAVA里面的int类型 和Integer类型 ...
- 覆盖element ui 的样式
我们可以使用 !important 来覆盖element ui 的样式 首先先在浏览器中找到 我们所要修改的样式 ,然后找到她的 class 重新写他的样式 ,例如 . app { width ...
- Centos6.5 安装 LAMP
Centos 安装 LAMP 系统: Centos 6.5 Apache 2.4 + PHP 7.2 + Mysql 5.7 准备工作 centos 查看版本 查看 centos版本 How to C ...
- Spring - <bean parent="xxx" 属性>
总结 必要条件: 1.子bean必须与父bean保持兼容,也就是说子bean中必须有父bean定义的所有属性. 2.父bean必须是抽象bean或者定义lazy-init=true也就是不让bean工 ...