Bribe the Prisoners SPOJ - GCJ1C09C

作为这类题代表,f[i][j]代表第i点到第j点单独处理的最值

这题关键:释放某个囚犯后,就把囚犯分成两段,两段互相独立

这类dp问题的突破口在于一个点能把问题分成两段,两段互相独立,这两段的限制条件只与l-1,r+1有关,记忆化搜索,时间复杂度o(n*n*n)

#include<bits/stdc++.h>
using namespace std;
long long n,t,T,min1,m,a[100000],f[1000][1000];
long long dfs(int l,int r){ // cout<<l<<' '<<r<<endl;if (r<l) return 0;if (f[l][r])  return f[l][r];long long p=1e15;for (int i=l;i<=r;i++)p=min(p,(a[r+1]-a[l-1]-2)+dfs(l,i-1)+dfs(i+1,r));// cout<<l<<' '<<r<<' '<<p<<endl;f[l][r]=p; return p;  }
int main()
{  cin>>T;while (T--){   t++;memset(f,0,sizeof(f));cin>>n>>m;min1=1e15;a[m+1]=0; a[m+2]=n+1;for (int i=1;i<=m;i++)  cin>>a[i];m=m+2;sort(a+1,a+1+m);for (int i=2;i<=m-1;i++)min1=min(min1,(n-1)+dfs(2,i-1)+dfs(i+1,m-1));cout<<"Case #"<<t<<": "; cout<<min1<<endl;  }
} 

[Codeforces Round #505D (rated, Div. 1 + Div. 2, ba]

其实是一道很简单的区间dp记忆化搜索,太久没写这种类型的了。

定义二叉排序树

二叉排序树或者是一棵空树,或者是具有下列性质的二叉树:

(1)若左子树不空,则左子树上所有结点的值均小于或等于它的根结点的值;

(2)若右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值;

(3)左、右子树也分别为二叉排序树;

显然会想到排序, 预处理两点之间是否有>1的gcd

考虑任何一个点作为根节点,只要两边分别满足条件即可,(同时两边有一个树与根节点不互质,这个只要在找子区间根节点是特判就行)(两边互相独立不影响)

节点两边分别为一段连续区间(且这段区间的根节点一定是r+1或者l-1)

f[i][j][0/1]代表i-j区间是否可能作为根节点的左子树/右子树

#include<bits/stdc++.h>
using namespace std;
int  n,t,a[1000],g[1000][1000],f[1000][1000][2],v[1000][1000][2];
inline int read(){int x=0,f=1;char ch=getchar();while(ch<'0' || ch>'9') {if(ch=='-') f=-1;ch=getchar();}while(ch>='0' && ch<='9') {x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}return x*f;
}
inline int gcd(int a,int b) {return b?gcd(b,a%b):a;}
int calc(int l,int r,int c)
{if (c==0)  return r+1;  else return l-1;}
int dfs(int l,int r,int c)
{ if (l>r) return 1;if (v[l][r][c])  return f[l][r][c];
//注意因为f[l][r][c]可能处理过后值为0;所以用v[i][j][r]判断是否处理过(调好久原因)v[l][r][c]=1;int p=0;for (int  i=l;i<=r;i++)if (g[i][calc(l,r,c)] && dfs(l,i-1,0) && dfs(i+1,r,1)){p=1; break;} f[l][r][c]=p; return p;
}
int main()
{  n=read();for (int i=1;i<=n;i++)  a[i]=read();sort(a+1,a+1+n);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; else g[i][j]=0;for (int i=1;i<=n;i++)if (dfs(1,i-1,0)  && dfs(i+1,n,1)) {t=1;break;}if (t==1)  cout<<"Yes"<<endl;else cout<<"No"<<endl;
}

[区间记忆化dp入门][Bribe the Prisoners SPOJ - GCJ1C09C][Codeforces Round #505D (rated, Div. 1 + Div. 2, ba]相关推荐

  1. Bribe the Prisoners SPOJ - GCJ1C09C

    滴答滴答---题目链接 贿赂囚犯 Bribe the prisoners ( 动态规划+剪枝) Problem In a kingdom there are prison cells (numbere ...

  2. FatMouse and Cheese HDU - 1078(记忆化搜索入门模板)

    题意: n * n的正方形格子(每个格子均放了奶酪),老鼠从(0,0)开始,每次最多移动k步,可以选择上下左右四个方向移动,下一个移动点奶酪块数量必须要大于当前点. 整理模板ing- 题目: FatM ...

  3. Educational Codeforces Round 111 (Rated for Div. 2) E. Stringforces 二分 + 状压dp

    传送门 文章目录 题意: 思路: 题意: 给你一个串,只包含前kkk个字母和???,定义fif_ifi​表示第iii个字母在串中出现的最长连续长度,你现在需要将???替换为前kkk个字母,使得mini ...

  4. Educational Codeforces Round 73 (Rated for Div. 2) Make The Fence Great Again dp + 结论

    传送门 文章目录 题意: 思路: 题意: 思路: 首先证明一个结论:一个数最多被加两次. 首先假设a[i]=a[i−1]a[i]=a[i-1]a[i]=a[i−1]或a[i]=a[i+1]a[i]=a ...

  5. Codeforces Round #459 (Div. 2) C 思维,贪心 D 记忆化dp

    Codeforces Round #459 (Div. 2) C. The Monster 题意:定义正确的括号串,是能够全部匹配的左右括号串. 给出一个字符串,有 (.). ? 三种字符, ? 可以 ...

  6. I. Space Station(hash记忆化+dp)

    <文章>陆游 文章本天成,妙手偶得之. 粹然无疵瑕,岂复须人为. 君看古彝器,巧拙两无施. 汉最近先秦,固已殊淳漓. 胡部何为者,豪竹杂哀丝. 后夔不复作,千载谁与期? I. Space ...

  7. 【线性 dp】A005_LC_不同的子序列(记忆化 / dp 分类讨论)

    一.Problem 给定一个字符串 S 和一个字符串 T,计算在 S 的子序列中 T 出现的个数. 题目数据保证答案符合 32 位带符号整数范围. 示例 1: 输入:S = "rabbbit ...

  8. 【01 dp】A005_LC_生成数组(暴搜 / 记忆化 / dp)

    一.Problem Given three integers n, m and k. Consider the following algorithm to find the maximum elem ...

  9. HDU1937How many ways(记忆化搜索)入门

    Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission ...

最新文章

  1. SSH配置优化和慢的解决方法
  2. day4 流程控制while 判断if
  3. JAVA try...catch...finally中的执行顺序和return语句
  4. 论文解读:深度监督网络(Deeply-Supervised Nets)
  5. shiro+springboot分析思路
  6. 对话阿里云李飞飞:下一代企业级数据库6大技术方向
  7. linux unset path,linux查看和修改PATH环境变量的方法
  8. 网络路径无法访问问题的解决
  9. Java:switch语句例子
  10. mac tomcat java_Mac下配置Java开发环境(JDK1.8)和Tomcat服务器
  11. Scrapy安装介绍
  12. Powerbi实现帕累托分析
  13. easyui 控制某列显示不显示_baogaiMCU控制OLED显示屏
  14. 剑指offer 面试题59 - II. 队列的最大值
  15. 使用DataWorks调度DLA循环任务
  16. ECSHOP模板设置只有登录用户才能查看商品详情内容
  17. 搭建MySQL可视化Web界面服务器
  18. windows快速创建文本文档的几个方法快捷键和
  19. jmeter接口测试详细教程
  20. 堆栈stack的基本操作

热门文章

  1. 手机号码验证的正则表达式
  2. 如何在Android 11 中正确请求位置权限?以及Android 8 - 11位置权限的变化及适配方法!
  3. 完全免费PNG素材库,免费可商用~
  4. 芯片已发展到2nm,摩尔定律会失效吗?芯片技术无法突破了吗?
  5. 硬件常用测试软件整理,方便大家下载
  6. 手机木马产业链分工明确,拿你的信息很简单
  7. micropython中文文档-microPython高级应用
  8. Python中字典的近亲——集合
  9. SSH连接远程服务器自动断开解决方案
  10. 因果推断----因果关系之梯