题意:给你一个升序的数组,元素之间如果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");
}

  

最新文章

  1. ubuntu 16.04 安装完QQ后,更新或apt-get报错
  2. pyinstaller 用法
  3. cnn笔记2
  4. win7 远程桌面关机
  5. Visio 2007/2010 左侧&quot;形状&quot;窗口管理
  6. [cocos2d-js]cc.RenderTexture几种用法(数字图片、刮刮乐效果)
  7. Matlab之字符串处理
  8. $(&quot;:input&quot;).each()和$.each()的区别
  9. Lua学习笔记(四):表和数组
  10. [jumping to the gate] 娱乐向setjmp
  11. 文本框脚本 - select 事件
  12. .Net高级进阶,WebApi和MVC进行模型验证的时候,教你如何自由控制需要进行验证的字段?
  13. Shell 简单构建 Node web服务器
  14. mybatis使用oracle的nulls first/nulls last
  15. 【题解】Luogu P2221 [HAOI2012]高速公路
  16. VS中Debug与Release、_WIN32与_WIN64的区别
  17. hadoop之 hadoop能为企业做什么?
  18. Apache-通过CGI执行脚本
  19. ORM是什么?
  20. hadoop之 hadoop日志存放路径

热门文章

  1. Educational Codeforces Round 33 (Rated for Div. 2)A-F
  2. SMOTE RF MLP demo use cross_val_score to find best argument 处理不平衡数据的demo代码 先做smote处理 再用交叉验证找到最好的模型参数 实践表明MLP更好
  3. 《Effective C++》——条款17:以独立语句将newed对象置入智能指针
  4. 剑指offer--6.数值的整数次方
  5. python 编码 —— codecs 库
  6. PHP Smarty template for website
  7. 排序算法 java实现2
  8. UVA - 11324 The Largest Clique (强连通缩点+dp)
  9. 使用 MLCC 替代电解电容需要注意几点 (2018-07-23)
  10. acm 士兵杀敌(一)