ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

CF1025D Recovering BST 题解

2021-11-07 16:32:54  阅读:110  来源: 互联网

标签:gcd Recovering BST 题解 int 枚举 read 区间 dp


Codeforces
Luogu

Description.

给定 \(n\) 个数,问能否构成一个二叉排序树,使得每条边两端 \(\gcd>1\)。

\(n\le 700\)

Solution.

性质什么的很显然,一个子树肯定是一个区间,根要么是左边要么是右边。
首先有一个 \(O(n^5)\) 的 dp,定义 dp[l][r][k] 表示 \([l,r]\) 作为子树,\(k\) 作为根能否可行。
每次枚举最后的根,枚举左端点的根,枚举右端点的根,复杂度达到了 \(O(n^5)\) 过不去(吧)

发现左子树和右子树其实本质相同,而且我们对于一个区间,它的根是确定的。
我们可以考虑分别设两个 dp 表示它作为左子树、右子树是否可行。
考虑这个能否转移,首先左边右边两段区间拼起来可以得到当前这个区间是否可行。
然后枚举分界点时,分界点肯定是根,然后就免去了暴力枚根的时间。
总复杂度变成了 \(O(n^3)\) 加上区间 dp 小常数。

Coding.

点击查看代码
//Coded by Kamiyama_Shiki on 2021.11.05 {{{
//是啊,你就是那只鬼了,所以被你碰到以后,就轮到我变成鬼了
#include<bits/stdc++.h>
using namespace std;typedef long long ll;
template<typename T>inline void read(T &x)
{
	x=0;char c=getchar(),f=0;
	for(;c<48||c>57;c=getchar()) if(!(c^45)) f=1;
	for(;c>=48&&c<=57;c=getchar()) x=(x<<1)+(x<<3)+(c^48);
	f?x=-x:x;
}
template<typename T,typename...L>inline void read(T &x,L&...l) {read(x),read(l...);}//}}}
const int N=705;int n,a[N],w[N][N],dp[N][N][2];
inline int gcd(int x,int y) {return y?gcd(y,x%y):x;}
int main()
{
	read(n);for(int i=1;i<=n;i++) read(a[i]);
	for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) w[i][j]=gcd(a[i],a[j]);
	for(int i=1;i<=n;i++) dp[i][i-1][0]=dp[i+1][i][1]=1;
	for(int ln=0;ln<n;ln++) for(int l=1,r=l+ln;r<=n;l++,r++)
		for(int k=l;k<=r;k++) if(dp[l][k-1][0]&&dp[k+1][r][1])
		{
			if(l==1&&r==n) return puts("Yes"),0;
			if(l!=1&&w[k][l-1]!=1) dp[l][r][1]=1;
			if(r!=n&&w[k][r+1]!=1) dp[l][r][0]=1;
		}
	return puts("No"),0;
}

标签:gcd,Recovering,BST,题解,int,枚举,read,区间,dp
来源: https://www.cnblogs.com/pealfrog/p/15520357.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有