正题


题目大意

一颗二叉查找树,以keyikey_ikeyi​为建值,以pip_ipi​为价值。然后一个节点的sumsumsum定义为这棵子树的价值之和。

要求相邻两个节点不互质的情况下所有节点的最大sumsumsum值之和。


解题思路

二叉查找树满足中序遍历的建值从小到大,所以我们考虑区间dpdpdp。

每次将两个区间组成的二叉树合并在一起。

我们预处理出哪些节点可以相邻

设f0/1,i,jf_{0/1,i,j}f0/1,i,j​表示作为将作为左边/右边的子树与上将上一个合并过来(根为i/ji/ji/j且没有另一边子树)时的最大价值。

那么我们可以得出动态转移方程
f0,i,j=f1,i,k,+f0,k+1,j(vi−1,k)f_{0,i,j}=f_{1,i,k},+f_{0,k+1,j}(v_{i-1,k})f0,i,j​=f1,i,k​,+f0,k+1,j​(vi−1,k​)
f1,i,j=f1,i,k,+f0,k+1,j(vk,j+1)f_{1,i,j}=f_{1,i,k},+f_{0,k+1,j}(v_{k,j+1})f1,i,j​=f1,i,k​,+f0,k+1,j​(vk,j+1​)


codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=310;
struct node{ll k,p;
}a[N];
ll n,f[2][N][N],ans,s[N];
bool v[N][N];
bool cmp(node x,node y)
{return x.k<y.k;}
int main()
{//freopen("tree.in","r",stdin);//freopen("tree.out","w",stdout);scanf("%lld",&n);for(ll i=1;i<=n;i++)scanf("%lld%lld",&a[i].k,&a[i].p);for(int i=1;i<=300;i++)for(int j=1;j<=300;j++)for(int k=0;k<2;k++)f[k][i][j]=-0x7fffffffffffffll;sort(a+1,a+1+n,cmp);ans=-1e18;for(ll i=1;i<=n;i++)for(ll j=1;j<=n;j++) v[i][j]=(__gcd(a[i].k,a[j].k)==1);for(ll i=1;i<=n;i++){s[i]=s[i-1]+a[i].p;if(i!=1&&!v[i][i-1]) f[0][i][i]=a[i].p;if(i!=n&&!v[i][i+1]) f[1][i][i]=a[i].p;}for(ll l=2;l<=n;l++){for(ll i=1;i<=n-l+1;i++){ll j=i+l-1;for(ll k=i;k<=j;k++){ll b;if(k==i) b=f[0][i+1][j]+(s[j]-s[i-1]);if(k==j) b=f[1][i][j-1]+(s[j]-s[i-1]);if(i<k&&j>k) b=f[1][i][k-1]+f[0][k+1][j]+(s[j]-s[i-1]);if(i!=1&&!v[k][i-1]) f[0][i][j]=max(f[0][i][j],b);if(i!=n&&!v[k][j+1]) f[1][i][j]=max(f[1][i][j],b);if(l==n) ans=max(ans,b);}}}if(ans<0) printf("-1");else printf("%lld",ans);
}

jzoj6287-扭动的树【区间dp】相关推荐

  1. YbtOJ#20240-[冲刺NOIP2020模拟赛Day10]弱者对决【笛卡尔树,区间dp】

    正题 题目链接:https://www.ybtoj.com.cn/contest/68/problem/4 题目大意 mmm个三元组(ai,bi,ci)(a_i,b_i,c_i)(ai​,bi​,ci ...

  2. CSP认证201612-4 压缩编码[C++题解]:区间dp、huffman树、石子合并

    题目分析 来源:acwing 分析: 本题难在想到是区间dp.想到区间dp之后,这就是石子合并的代码直接默写. 那么是如何建模的呢?我们把huffman编码(这里要求按照字典序大小编码,和huffma ...

  3. 【CSU - 1980 】不堪重负的树(树上区间dp)

    题干: 小X非常喜欢树,然后他生成了一个大森林给自己玩. 玩着玩着,小X陷入了沉思. 一棵树由N个节点组成,编号为i的节点有一个价值Wi. 假设从树根出发前往第i个节点(可能是树根自己),一共需要经过 ...

  4. 暑假集训总结——区间DP,堆的概念及应用,STL(vector、set、pair、map、priority_queue),hash表,树状数组,图论

    序言: 经过长达十几天的集训,确实学了不少知识点.我想如果再不总结的话,6天之后又要忘完了. 所以发一篇具有总结回忆性的博客,供大家回忆. 目录会本人自己排列的时间的先后顺序来排列,可直接食用. 目录 ...

  5. 计蒜客 2020 蓝桥杯省赛 B 组模拟赛(五)E区间dp H 裴蜀 J dp A-J 权值线段树

    题目链接 因为要去笔试.所以只打了两个小时,有点求快,很多细节没写好就匆匆交,而且没有检查,打的有点菜 C-煎牛排 做法: 所有的面的个数sum=2*n   然后sum/(2*k)即可. ans=ma ...

  6. 0x53. 动态规划 - 区间DP(习题详解 × 8)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 文章目录 0x53. 动态规划 - 区间DP Problem A. 最优矩阵链乘 Problem B. ...

  7. CSUOJ-1980 不堪重负的数(区间dp)

    1980: 不堪重负的树 Submit Page    Summary    Time Limit: 1 Sec     Memory Limit: 128 Mb     Submitted: 57  ...

  8. Vijos 1100 (区间DP)

    题目链接: https://vijos.org/p/1100 题目大意:NOIP著名的加分二叉树.给出一棵树的中序遍历,加分规则左子树*右子树+根.空子树分数为1.问最大加分的树结构,输出树结构的先序 ...

  9. New Year and Old Subsequence CodeForces - 750E(线段树+矩阵dp)2019南昌icpc网络赛Hello 2019

    A string t is called nice if a string "2017" occurs in t as a subsequence but a string &qu ...

  10. 2021牛客暑期多校训练营7 xay loves monotonicity 线段树区间合并

    传送门 文章目录 题意: 思路: 题意: 题面挺绕口的,还是看原题比较好. 大概的意思就是让你从给定的区间中选择一个以左端点为起点的一个上升子序列,让后将这些下标存下来,在bbb中将这些位置拿出来后, ...

最新文章

  1. js弹出一段html,html js 弹出层
  2. 该怎样才能将PDF转换成HTML
  3. vs 服务容器中已存在服务_容器中某Go服务GC停顿经常超过100ms排查
  4. webpack 语法
  5. eclipse下看android support v4源码
  6. oracle查询排序速度慢,Oracle-请问Oracle SQL排序查询慢如何解决
  7. leetcode32 最长有效括号
  8. sob攻略超详细攻略_2020云南旅游超详细必看攻略(附带云南美食景点攻略)
  9. python搭建http服务_Python搭建HTTP服务过程图解
  10. OSChina 周日乱弹 —— 十大人艰不拆的网络真相!
  11. 李兴平 越有人盯着360越会保护用户隐私
  12. Gerrit项目权限设置总结
  13. ICCV 2021 口罩人物身份鉴别全球挑战赛冠军方案分享
  14. Ty p e O R M框架
  15. 1990 Count the Number of Experiments
  16. Odoo 14 手册 采购订单 采购招标 代发货 供应商管理 对账
  17. 【181221】VC 编写的网址收藏夹程序(Access)源代码
  18. Vs Cood 本地代码配置(个人使用)
  19. #最详细# Github Page 个人博客绑定二级域名
  20. 简单回顾过去一年的工作201906-202006

热门文章

  1. linux c中动态申请二维数组,Linux C 编程详解第五篇:二维数组
  2. mysql修改字段的顺序_Mysql中如何修改字段的排列顺序?
  3. 纯c语言实现的改进暗通道去雾算法测试程序(附赠大量测试图像),基于改进暗通道先验算法的图像去雾...
  4. gif android 点击 加载,android 加载显示gif图片的解决方案
  5. android虚线边框_Android实现代码画虚线边框背景效果
  6. git revert 后再次merge_git如何回滚错误合并的分支
  7. [mybatis]映射文件_select_返回集合(List,Map)
  8. linux aspnet服务器,在Linux中安装ASPNET.Core3.0运行时的示例代码
  9. Redis持久化-深入理解AOF,RDB
  10. callmode php_Rabbitmq各方法的作用详解