题意

分析

二叉查找树按照键值排序的本质是中序遍历,每次我们可以在当前区间中提取出一个根,然后划分为两个子区间做区间DP。记\(f(i,j,k)\)表示区间[i, j]建子树,子树根节点的父亲是第k个数的最大sum值之和。由于k只能为i-1或j+1,故状态数只有\(O(n^2)\),总复杂度\(O(n^3)\)。

在代码实现中,为了减小空间,f的k那一维可以用0/1表示。

代码

#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<ctime>
#include<iostream>
#include<string>
#include<vector>
#include<list>
#include<deque>
#include<stack>
#include<queue>
#include<map>
#include<set>
#include<bitset>
#include<algorithm>
#include<complex>
#pragma GCC optimize ("O0")
using namespace std;
template<class T> inline T read(T&x)
{
T data=0;
int w=1;
char ch=getchar();
while(!isdigit(ch))
{
if(ch=='-')
w=-1;
ch=getchar();
}
while(isdigit(ch))
data=10*data+ch-'0',ch=getchar();
return x=data*w;
}
typedef long long ll;
const int INF=0x7fffffff; const int MAXN=307;
int n;
ll k[MAXN],v[MAXN],sum[MAXN];
bool e[MAXN][MAXN];
bool vis[MAXN][MAXN][2];
ll f[MAXN][MAXN][2]; ll dp(int l,int r,int fa)
{
if(l>r)
return 0;
if(vis[l][r][fa])
return f[l][r][fa];
vis[l][r][fa]=1;
ll&res=f[l][r][fa]=-1;
int rt=fa==0?l-1:r+1;
for(int mid=l;mid<=r;++mid)
if(e[mid][rt])
{
if(dp(l,mid-1,1)==-1||dp(mid+1,r,0)==-1)
continue;
res=max(res,f[l][mid-1][1]+f[mid+1][r][0]+sum[r]-sum[l-1]);
}
return res;
} typedef pair<ll,ll> pii; int main()
{
freopen("tree.in","r",stdin);
freopen("tree.out","w",stdout);
vector<pii>sorted;
read(n);
for(int i=1;i<=n;++i)
{
static ll x,y;
read(x);read(y);
sorted.emplace_back(x,y);
if(x==1)
{
puts("-1");
return 0;
}
}
sort(sorted.begin(),sorted.end());
for(int i=1;i<=n;++i)
{
tie(k[i],v[i])=sorted[i-1];
sum[i]=sum[i-1]+v[i];
}
for(int i=1;i<n;++i)
for(int j=i+1;j<=n;++j)
if(__gcd(k[i],k[j])>1)
e[i][j]=e[j][i]=1;
ll ans=-1;
for(int i=1;i<=n;++i)
{
if(dp(1,i-1,1)==-1||dp(i+1,n,0)==-1)
continue;
ans=max(ans,f[1][i-1][1]+f[i+1][n][0]+sum[n]);
}
printf("%lld\n",ans);
// fclose(stdin);
// fclose(stdout);
return 0;
}

test20180922 扭动的树的更多相关文章

  1. 【JZOJ6287】扭动的树

    description analysis 区间\(DP\),首先按照键值排个序,这样保证树的中序遍历就为原序列 设\(f[0][i][j]\)表示\([i..j]\)区间作为\([unknown..i ...

  2. NOIp2018集训test-9-22(am/pm) (联考三day1/day2)

    szzq学长出的题,先orz一下. day1 倾斜的线 做过差不多的题,写在我自己的博客里,我却忘得一干二净,反而李巨记得清清楚楚我写了的. 题目就是要最小化这个东西 $|\frac{y_i-y_j} ...

  3. B树——算法导论(25)

    B树 1. 简介 在之前我们学习了红黑树,今天再学习一种树--B树.它与红黑树有许多类似的地方,比如都是平衡搜索树,但它们在功能和结构上却有较大的差别. 从功能上看,B树是为磁盘或其他存储设备设计的, ...

  4. ASP.NET Aries 入门开发教程8:树型列表及自定义右键菜单

    前言: 前面几篇重点都在讲普通列表的相关操作. 本篇主要讲树型列表的操作. 框架在设计时,已经把树型列表和普通列表全面统一了操作,用法几乎是一致的. 下面介绍一些差距化的内容: 1:树型列表绑定: v ...

  5. 再讲IQueryable<T>,揭开表达式树的神秘面纱

    接上篇<先说IEnumerable,我们每天用的foreach你真的懂它吗?> 最近园子里定制自己的orm那是一个风生水起,感觉不整个自己的orm都不好意思继续混博客园了(开个玩笑).那么 ...

  6. HDU1671——前缀树的一点感触

    题目http://acm.hdu.edu.cn/showproblem.php?pid=1671 题目本身不难,一棵前缀树OK,但是前两次提交都没有成功. 第一次Memory Limit Exceed ...

  7. 算法与数据结构(十一) 平衡二叉树(AVL树)

    今天的博客是在上一篇博客的基础上进行的延伸.上一篇博客我们主要聊了二叉排序树,详情请戳<二叉排序树的查找.插入与删除>.本篇博客我们就在二叉排序树的基础上来聊聊平衡二叉树,也叫AVL树,A ...

  8. [C#] C# 知识回顾 - 表达式树 Expression Trees

    C# 知识回顾 - 表达式树 Expression Trees 目录 简介 Lambda 表达式创建表达式树 API 创建表达式树 解析表达式树 表达式树的永久性 编译表达式树 执行表达式树 修改表达 ...

  9. bzoj3207--Hash+主席树

    题目大意: 给定一个n个数的序列和m个询问(n,m<=100000)和k,每个询问包含k+2个数字:l,r,b[1],b[2]...b[k],要求输出b[1]~b[k]在[l,r]中是否出现. ...

随机推荐

  1. C# 中的集合(Array/ArrayList/List<T>/HashTable/Dictionary)

    int [] numbers = new int[5]; // 长度为5,元素类型为 int. string[,] names = new string[5,4]; // 5*4 的二维数组 byte ...

  2. codeforces 1042c// Array Product// Codeforces Round #510(Div. 2)

    题意:给出一个数组,2种操作:.1:x*y然后x消失,2:除掉x(2操作最多只能进行一次).问最大的结果的一种操作方式.逻辑题,看能不能想全面. 1先数好0,正,负的数量,zero,pos,neg.如 ...

  3. git rm删除

    在Git中,删除也是一个修改操作,我们实战一下,先添加一个新文件test.txt到Git并且提交: $ git add test.txt $ git commit -m "add test. ...

  4. mysql timestamp的默认值

    当default 0,default '0000-00-00 00:00:00'都失效的时候,请尝试下 ALTER table `coupon_gift` add column `time_end` ...

  5. 字 字节 比特,以及各个算数类型所占用的大小范围 c++

    字 储存的基本单元,. 1字=4/8字节 字节 byte 字节是计算机中数据处理的基本单元. 1byte=8bit 比特(bit/位) 表示二进制位,计算机内部数据储存的最小单位 例如 1011是一个 ...

  6. 基础最短路(模板 bellman_ford)

    Description 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt.但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找最短的从商店 ...

  7. SMTP 发邮件

    public class EmailOrderProcessor :IOrderProcessor { private EmailSettings es; public EmailOrderProce ...

  8. CNN autoencoder 进行异常检测——TODO,使用keras进行测试

    https://sefiks.com/2018/03/23/convolutional-autoencoder-clustering-images-with-neural-networks/ http ...

  9. AIOps探索:基于VAE模型的周期性KPI异常检测方法——VAE异常检测

    AIOps探索:基于VAE模型的周期性KPI异常检测方法 from:jinjinlin.com   作者:林锦进 前言 在智能运维领域中,由于缺少异常样本,有监督方法的使用场景受限.因此,如何利用无监 ...

  10. forget word out2

      1★ dictionary / dik ʃ ən əri   dict   2★ fy => faction f æk ʃ ən 派别