1.石子归并问题

dp[i][j]表示区间i到j合并所需的最小花费。

先求出小区间的最小花费,再转移到大的区间。

转移方程:dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j])

初始状态:dp[i][i]=0

模板:

    for(int i=;i<=n;i++)cin>>a[i],sum[i]=sum[i-]+a[i]
for(int l=;l<=n;l++){
for(int i=;i+l-<=n;i++){
  int j=i+l-;
  dp[i][j]=INF;
  for(int k=i;k<j;k++){
    dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+][j]+sum[j]-sum[i-]);
}
}

2.括号匹配问题

求最大括号匹配数

dp[i][j]表示i到j区间的最大括号匹配数

先求出小区间的最大括号匹配数,再转移到大区间。

状态转移:

dp[i][j]=dp[i+1][j-1]+2(s[i]=='('&&s[j]==')'||s[i]=='['&&s[j]==']')

dp[i][j]=max(dp[i][k]+dp[k+1][j],dp[i][j])(i<=k<j)

初始状态:dp[i][j]=0

模板:

        for(int len=;len<=s.size();len++){
for(int i=;i<s.size();i++){
int j=i+len-;
if(j<s.size()){
if(s[i]=='('&&s[j]==')'||s[i]=='['&&s[j]==']')dp[i][j]=dp[i+][j-]+;
for(int k=i;k<j;k++)
dp[i][j]=max(dp[i][k]+dp[k+][j],dp[i][j]);
}
}
}

记录路径,括号补全

用pos[i][j]记录i到j这段区间从哪个位置断开所要消耗的括号最少,然后从断点分开,递归输出答案。

模板:

void dfs(int l,int r){
if(l>r)return ;
if(l==r){
if(s[l]=='('||s[l]==')')putchar('('),putchar(')');
else putchar('['),putchar(']');
}
else{
if(pos[l][r]==-){
putchar(s[l]);
dfs(l+,r-);
putchar(s[r]);
}
else{
dfs(l,pos[l][r]);
dfs(pos[l][r]+,r);
}
}
}
for(int l=;l<=len;l++){
for(int i=;i+l-<len;i++){
int j=i+l-;
if(s[i]=='('&&s[j]==')'||s[i]=='['&&s[j]==']')dp[i][j]=dp[i+][j-]+,pos[i][j]=-;
for(int k=i;k<j;k++){
if(dp[i][k]+dp[k+][j]>=dp[i][j]){
dp[i][j]=dp[i][k]+dp[k+][j];
pos[i][j]=k;
}
}
}
}
dfs(,len-);

参考博客:http://blog.csdn.net/y990041769/article/details/24194605

算法笔记--区间dp的更多相关文章

  1. 算法笔记--数位dp

    算法笔记 这个博客写的不错:http://blog.csdn.net/wust_zzwh/article/details/52100392 数位dp的精髓是不同情况下sta变量的设置. 模板: ]; ...

  2. [学习笔记]区间dp

    区间 \(dp\) 1.[HAOI2008]玩具取名 \(f[l][r][W/I/N/G]\) 表示区间 \([l,r]\) 中能否压缩成 \(W/I/N/G\) \(Code\ Below:\) # ...

  3. 算法复习——区间dp

    感觉对区间dp也不好说些什么直接照搬讲义了2333 例题: 1.引水入城(洛谷1514) 这道题先开始看不出来到底和区间dp有什么卵关系···· 首先肯定是bfs暴力判一判可以覆盖到哪些城市····无 ...

  4. 洛谷P1220 关路灯 题解 区间DP

    题目链接:https://www.luogu.com.cn/problem/P1220 本题涉及算法:区间DP. 我们一开始要做一些初始化操作,令: \(p[i]\) 表示第i个路灯的位置: \(w[ ...

  5. 算法提高 矩阵乘法 区间DP

    这是神题,n <= 1000,如果是极限数据普通的n^3区间DP怎么可能过?可偏偏就过了. 刘汝佳大哥的训练指南上面说的存在nlgn的算法解决矩阵链乘问题,可是百度都找不到.... AC代码 # ...

  6. 区间DP与贪心算法的联系(uav Cutting Sticks &amp;&amp; poj Fence Repair(堆的手工实现))

    由于,这两题有着似乎一样的解法所以将其放在一起总结比較,以达到更好的区分二者的差别所在. 一.区间DP uva的Cutting Sticks是一道典型的模板题. 题目描写叙述: 有一根长度为l的木棍, ...

  7. 蓝桥 ADV-232 算法提高 矩阵乘法 【区间DP】

      算法提高 矩阵乘法   时间限制:3.0s   内存限制:256.0MB      问题描述 有n个矩阵,大小分别为a0*a1, a1*a2, a2*a3, ..., a[n-1]*a[n],现要 ...

  8. 51 nod 石子归并 + v2 + v3(区间dp,区间dp+平行四边形优化,GarsiaWachs算法)

    题意:就是求石子归并. 题解:当范围在100左右是可以之间简单的区间dp,如果范围在1000左右就要考虑用平行四边形优化. 就是多加一个p[i][j]表示在i到j内的取最优解的位置k,注意能使用平行四 ...

  9. 区间DP 学习笔记

    前言:本人是个DP蒟蒻,一直以来都特别害怕DP,终于鼓起勇气做了几道DP题,发现也没想象中的那么难?(又要被DP大神吊打了呜呜呜. ----------------------- 首先,区间DP是什么 ...

随机推荐

  1. Twitter OA prepare: even sum pairs

    思路:无非就是扫描一遍记录奇数和偶数各自的个数,比如为M和N,然后就是奇数里面选两个.偶数里面选两个,答案就是M(M-1)/2 + N(N-1)/2

  2. LeetCode-MinimumDepthOfBinaryTree

    题目: Given a binary tree, find its minimum depth. The minimum depth is the number of nodes along the ...

  3. zw版【转发·台湾nvp系列Delphi例程】HALCON TestRegionPoint1

    zw版[转发·台湾nvp系列Delphi例程]HALCON TestRegionPoint1 unit Unit1;interfaceuses Windows, Messages, SysUtils, ...

  4. python 文件操作 练习:取得文件的最后存取时间

    #coding=utf-8 import osimport time file_atime=int(os.path.getatime('d:\\a.txt'))print "file_ati ...

  5. angularjs 路由参数

    .state('classrooms',{ url: '/classrooms/:id' }) .state('classrooms',{ url: '/classrooms/{id}' }) .st ...

  6. Kotlin语言Web库又添一虎将:Kweb

    Kweb是一个库,您可以利用它使用Kotlin编程语言轻松构建Web应用程序.从程序员的角度来看,它基本上消除了浏览器和服务器之间的分离.这意味着只操纵DOM的事件不需要进行服务器往返.由于Kweb是 ...

  7. python之路----TCP与UDP

    TCP import socket #tcp协议 sk = socket.socket() # 买手机 创建一个socket对象 sk.bind(('127.0.0.1',8080)) # 给serv ...

  8. (iOS)关于键盘遮挡textfield问题

    记录一下自己经常遇到问题.使用textfield(textview).当输入框位置比较靠下时,弹出的键盘会遮挡输入框,这是就需要动态移动输入框编辑状态时self.view的位置, 自己经常用的方法有两 ...

  9. SQL学习之MYSQL的常用命令和增删改查语句和数据类型

    连接命令:mysql -h[主机地址] -u[用户名] -p[用户密码] 创建数据库:create database [库名] 显示所有数据库: show databases; 打开数据库:use [ ...

  10. Python3 打开 https 链接,异常:“SSL: CERTIFICATE_VERIFY_FAILED”

    Python3 打开 https 链接,异常:“SSL: CERTIFICATE_VERIFY_FAILED” 一.问题 Python2.7.9 之后,当使用urllib.urlopen打开一个 ht ...