Codeforces #505(div1+div2) D Recovering BST
2024-08-22 23:04:40
题意:给你一个升序的数组,元素之间如果gcd不为1可以建边,让你判断是否可以建成一颗二叉搜索树。
解法:dp,首先建图,然后进行状态转移。因为如果点k左端与i相连,右端与k相连,则i和k可以相连,同时像左右两端拓展。
最后判断1和n是否相连即可。
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<vector>
using namespace std;
int dp[710][710],l[710][710],r[710][710],G[710][710],a[710];
inline int gcd(int a,int b){
return b?gcd(b,a%b):a;
}
int main(){
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(gcd(a[i],a[j])>1)G[i][j]=1;
}
}
for(int i=1;i<=n;i++)
l[i][i]=r[i][i]=1;
for(int i=n;i>=1;i--){
for(int j=i;j<=n;j++)
for(int k=i;k<=j;k++){
if(l[i][k]&&r[k][j]){//如果k左端可以到i,右端可以到j
dp[i][j]|=1;
r[i-1][j]|=G[k][i-1];//向左延伸
l[i][j+1]|=G[k][j+1];//向右延申
}
}
}
if(dp[1][n])printf("Yes\n");
else printf("No\n");
}
最新文章
- ubuntu 16.04 安装完QQ后,更新或apt-get报错
- pyinstaller 用法
- cnn笔记2
- win7 远程桌面关机
- Visio 2007/2010 左侧";形状";窗口管理
- [cocos2d-js]cc.RenderTexture几种用法(数字图片、刮刮乐效果)
- Matlab之字符串处理
- $(";:input";).each()和$.each()的区别
- Lua学习笔记(四):表和数组
- [jumping to the gate] 娱乐向setjmp
- 文本框脚本 - select 事件
- .Net高级进阶,WebApi和MVC进行模型验证的时候,教你如何自由控制需要进行验证的字段?
- Shell 简单构建 Node web服务器
- mybatis使用oracle的nulls first/nulls last
- 【题解】Luogu P2221 [HAOI2012]高速公路
- VS中Debug与Release、_WIN32与_WIN64的区别
- hadoop之 hadoop能为企业做什么?
- Apache-通过CGI执行脚本
- ORM是什么?
- hadoop之 hadoop日志存放路径
热门文章
- Educational Codeforces Round 33 (Rated for Div. 2)A-F
- SMOTE RF MLP demo use cross_val_score to find best argument 处理不平衡数据的demo代码 先做smote处理 再用交叉验证找到最好的模型参数 实践表明MLP更好
- 《Effective C++》——条款17:以独立语句将newed对象置入智能指针
- 剑指offer--6.数值的整数次方
- python 编码 —— codecs 库
- PHP Smarty template for website
- 排序算法 java实现2
- UVA - 11324 The Largest Clique (强连通缩点+dp)
- 使用 MLCC 替代电解电容需要注意几点 (2018-07-23)
- acm 士兵杀敌(一)