区间DP是一类在区间上进行dp的最优问题,一般是根据问题设出一个表示状态的dp,可以是二维的也可以是三维的,一般情况下为二维。

然后将问题划分成两个子问题,也就是一段区间分成左右两个区间,然后将左右两个区间合并到整个区间,或者说局部最优解合并为全局最优解,然后得解。


区间dp就是f[i][j]表示i到j的一段区间, 然后去转移最优值的dp

一段区间表示一段状态,维护i~j的最优值来转移。

常见区间dp有:合并石子,破环成链类题目


其实对于环形区间DP有一个对付环的好方法:关于N取模(特殊处理0)!

e.g.能量项链

设 f[i,j]为第i到j颗珠子合并的最大能量为max{f[i,k]+f[k+1,j]+a[i]*a[k+1]+a[j+1]};//对k+1,j,j+1等数字关于m取模

这样一来,i>j时 合并就是从i到n在回到1再到j
若使用复制一次数组的方法,时间复杂度为(2*n)^3,空间复杂度为4*n^2
环形取模方法与链式区间空间复杂度相同,且无空间浪费,时间复杂度为n^3


求和(e.g.石子合并)

对于求和的区间DP最重要的前缀和优化( 要不然就要多花时间在求和上面 ) 这种问题我们先考虑其中最大的区间1---2*n (因为是绕成一圈所以是2*n,2*n的话可以保证在一个环上所有的区间情况)。
那么对于最大的区间1---2*n, 首先我们可以知道如果他们只有两个的话那么是可以直接合并的, 而且还有一个条件可以确定,就是当区间中只有一个元素的时候,答案是0
那么对于一个我们不知道答案的区间,计算他的答案有两个方面
①要求区间和
②要找到一种方法把自己分成两个区间
分成两个区间的时候,我们需要知道当前分成这两个区间之后的最大答案是多少。那么我们就枚举再哪里切断这个大区间让他变成两个小区间
于是就推得了状态转移方程。 
 
 

区间dp笔记√的更多相关文章

  1. [学习笔记]区间dp

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

  2. 区间dp学习笔记

    怎么办,膜你赛要挂惨了,下午我还在学区间\(dp\)! 不管怎么样,计划不能打乱\(4\)不\(4\).. 区间dp 模板 为啥我一开始就先弄模板呢?因为这东西看模板就能看懂... for(int i ...

  3. 区间DP 学习笔记

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

  4. CH5301 石子合并【区间dp】

    5301 石子合并 0x50「动态规划」例题 描述 设有N堆沙子排成一排,其编号为1,2,3,…,N(N<=300).每堆沙子有一定的数量,可以用一个整数来描述,现在要将这N堆沙子合并成为一堆, ...

  5. 数位dp 笔记

    目录 数位dp 笔记 解决的问题 & 主体思想 入门 -- windy数 绕一个弯 -- 萌数 the end? -- 恨7不成妻 小心细节 [SDOI2016]储能表 复杂度起飞 [AHOI ...

  6. 【BZOJ-4380】Myjnie 区间DP

    4380: [POI2015]Myjnie Time Limit: 40 Sec  Memory Limit: 256 MBSec  Special JudgeSubmit: 162  Solved: ...

  7. 【POJ-1390】Blocks 区间DP

    Blocks Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 5252   Accepted: 2165 Descriptio ...

  8. 区间DP LightOJ 1422 Halloween Costumes

    http://lightoj.com/volume_showproblem.php?problem=1422 做的第一道区间DP的题目,试水. 参考解题报告: http://www.cnblogs.c ...

  9. BZOJ1055: [HAOI2008]玩具取名[区间DP]

    1055: [HAOI2008]玩具取名 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1588  Solved: 925[Submit][Statu ...

随机推荐

  1. Linux C 程序 GTK+图形界面编程(22)

    GTK+图形界面编程 Linux大多是在字符界面,但也可以开发图形界面 目前已经存在多种Linux下开发图形界面的程序开发包:最常用的是Qt和GTK+ Qt是一个跨平台的图形界面开发库,不仅仅支持Li ...

  2. 关于angularJS与jquery在使用上的一些感悟

    最近做的项目中,有同时用到angularJS与jquery两种JS框架. 在使用过程中发现,angularJS的用法更像是面向对象的编程模式.它会要求你定义一个view model,然后所有的页面变化 ...

  3. 1100. Mars Numbers (20)

    People on Mars count their numbers with base 13: Zero on Earth is called "tret" on Mars. T ...

  4. 在Windows 上安装SQL Server的一些注意事项

    基本来说安装SQL Server 单节点数据库并不是很困难的事情,大多可以通过Next来安装完成.其中要注意以下几点 安装.net3.5 可以参考本Blog的一些安装须知. Windows Serve ...

  5. MySQL 死锁日志分析

    ------------------------ LATEST DETECTED DEADLOCK ------------------------ 140824  1:01:24 *** (1) T ...

  6. CustomEditor 自定义预览窗

    using UnityEngine; using System.Collections; public class MyTextureView : MonoBehaviour { public Tex ...

  7. C# ASP .NET WEB方向和WPF方向,我该如何去选择

    一个2012年南航毕业学软件的学生,该如何去选择我的职业方向? 2011年11分月份,我被老师介绍在南京珠江路华丽国际大厦工作,开发一个大型国际物流平台,公司的开发人员比较少,设计网站的是高校的老师, ...

  8. 在一个字符串(1<=字符串长度<=10000,全部由大小写字母组成)中找到第一个只出现一次的字符,并返回它的位置

    // test20.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> #include< ...

  9. ubuntu 安装git

    问题描述:         ubuntu安装git 问题解决:     (1)ubuntu下载git 注:           使用命令apt-get install git安装     (2)查看g ...

  10. Vim Cscope安装与使用

    问题描述:        Cscope是VIM适用的工具和插件,通过Cscope可以方便的获取某个函数的定义以及被那些函数调用 问题解决:         (1)Cscope安装    注:      ...