容易想到设f[i][j][k]为i~j区间以k为根是否能构成bst。这样是O(n4)的。考虑将状态改为f[i][j][0/1]表示i~j区间以i-1/j+1为根能否构成bst。显然如果是i-1作为根的话i~j区间都在它的右子树,所以转移时枚举右子树的根并判断是否合法,j+1类似。

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
int read()
{int x=0,f=1;char c=getchar();while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();return x*f;
}
#define N 710
int n,a[N];
bool flag[N][N],f[N][N][2];
int gcd(int n,int m){return m==0?n:gcd(m,n%m);}
int main()
{
#ifndef ONLINE_JUDGEfreopen("d.in","r",stdin);freopen("d.out","w",stdout);const char LL[]="%I64d\n";
#elseconst char LL[]="%lld\n";
#endifn=read();for (int i=1;i<=n;i++) a[i]=read();for (int i=1;i<=n;i++)for (int j=1;j<=n;j++)if (gcd(a[i],a[j])>1) flag[i][j]=1;for (int i=1;i<=n+1;i++) f[i][i-1][0]=f[i][i-1][1]=1;for (int k=1;k<=n;k++)for (int i=1;i<=n-k+1;i++){int j=i+k-1;for (int d=i;d<=j;d++)if (f[i][d-1][1]&&f[d+1][j][0]){if (flag[i-1][d]) f[i][j][0]=1;if (flag[j+1][d]) f[i][j][1]=1;}}for (int i=1;i<=n;i++) if (f[1][i-1][1]&&f[i+1][n][0]) {cout<<"Yes";return 0;}cout<<"No";return 0;
}

转载于:https://www.cnblogs.com/Gloid/p/9780193.html

Codeforces 1025D(区间dp)相关推荐

  1. Recovering BST CodeForces - 1025D (区间dp, gcd)

    大意: 给定$n$个数, 任意两个$gcd>1$的数间可以连边, 求是否能构造一棵BST. 数据范围比较大, 刚开始写的$O(n^3\omega(1e9))$竟然T了..优化到$O(n^3)$才 ...

  2. CodeForces - 1312E Array Shrinking(区间dp)(通俗易懂)

    CodeForces - 1312E Array Shrinking(区间dp) 题目链接: 没做出来,看了一下别人的题解,才A掉.但网上没发现一篇讲得比较易懂的题解,所以就准备写一篇再加上我自己的理 ...

  3. Codeforces 508E Arthur and Brackets 区间dp

    Arthur and Brackets 区间dp, dp[ i ][ j ]表示第 i 个括号到第 j 个括号之间的所有括号能不能形成一个合法方案. 然后dp就完事了. #include<bit ...

  4. CodeForces - 1312E Array Shrinking(区间dp)

    题目链接:点击查看 题目大意:给出 n 个数,现在可执行的操作是: 找到相邻且数值相等的两个数,即 abs( i - j ) == 1 && a[ i ] == a[ j ] 使得两个 ...

  5. Codeforces Round #655 (Div. 2) E. Omkar and Last Floor 区间dp + 巧妙的状态设计

    传送门 题意: 思路: 按照贪心的思路来考虑的话,显然是每一列111的个数越多越好,所以我们能放到一列就放到一列.设f[l][r]f[l][r]f[l][r]为在[l,r][l,r][l,r]内,区间 ...

  6. 【CodeForces - 245H 】Queries for Number of Palindromes (带容斥的区间dp)

    题干: You've got a string s = s1s2... s|s| of length |s|, consisting of lowercase English letters. The ...

  7. Codeforces Gym100543L Outer space invaders 区间dp 动态规划

    原文链接https://www.cnblogs.com/zhouzhendong/p/CF-Gym100543L.html 题目传送门 - CF-Gym100543L 题意 $T$ 组数据. 有 $n ...

  8. Codeforces Gym100543L:Outer space invaders(区间DP)

    题目链接 题意 有n个人,每个人有一个出现时间a和一个开枪时间b和一个距离d,在任意一个时刻,你可以选择炸人,你要炸一个人的花费是和他的距离d,并且所有的已经出现并且还没开枪的和你距离<=d的人 ...

  9. CF313D Ilya and Roads(区间DP)

    题目链接:http://codeforces.com/problemset/problem/313/D 题意:给出一个长度为n的区间.给出m个小区间以及每个小区间的代价.选择小区间的一些覆盖n中的至少 ...

  10. CF - D. Letter Picking(博弈 + 区间dp)

    https://codeforces.com/problemset/problem/1728/D 题意 给定长度为 n 的字符串 S,n 为偶数.Alice 和 Bob 初始分别都有一个空串. 现在 ...

最新文章

  1. Verilog中实现电平检测
  2. hdu 5433(bfs+dp)
  3. linux下redis安装
  4. 基于.NET的系统开发需要注意的问题总结
  5. 去除Java字符串中的空格
  6. 如何成为一个Java高薪架构师?
  7. 有感于去哪儿的一道笔试题
  8. 对PostgreSQL xmin的深入学习
  9. MySQL数据库迁移注意点
  10. 忽略mysql库的同步
  11. 用户故事与敏捷方法—编写故事
  12. 太戈编程DEVC++教师答案库
  13. mysql禁止明文密码_暂时在MySQL *中存储明文密码是否安全*?
  14. Mac 环境endnote 各种问题解决方法和word各种技巧汇总
  15. android 朗读tts_如何设置Android以大声朗读您的文本
  16. 特定软件无法联网,nslookup无法解析任何地址,但是其他业务工作正常的故障...
  17. Python 数据处理与分析(六) 设计一个高回报的投资组合(投资回报和风险分析)任务 5:使用Python实现均值-方差组合模型
  18. IE主页被篡改为http://www.hao123.com/?tn=29065018_59_hao_pg 怎么办?
  19. 微信分享功能,手机分享图片不显示
  20. ibm x86 服务器 系列,IBM至强5600全系列服务器横向对比

热门文章

  1. android百度地图开发之自动定位所在位置与固定位置进行驾车,步行,公交路线搜索...
  2. Ruby on rails环境和开发工具准备...
  3. Google Map App 问题集锦
  4. ×××生成算法的分析
  5. Centos5.6入门学习003之Cenots环境初始化
  6. 关于开源软件的书籍一定要尽量提供搭配好的软件版本
  7. 被上海爱立信录取,GL
  8. 曙光与包头签署云计算中心战略合作协议
  9. Hadoop集群安装-CDH5(5台服务器集群)
  10. 透视表提取不反复记录(3)-每组最小值