区间dp原理

简介: 笔记

区间DP


石子合并

设有N堆石子排成一排,其编号为1,2,3,…,N。


每堆石子有一定的质量,可以用一个整数来描述,现在要将这N堆石子合并成为一堆。


每次只能合并相邻的两堆,合并的代价为这两堆石子的质量之和,合并后与这两堆石子相邻的石子将和新堆相邻,合并时由于选择的顺序不同,合并的总代价也不相同。


问题是:找出一种合理的方法,使总的代价最小,输出最小代价。


状态表示

f [ i ] [ j ]所有将第i 堆石子到第j堆石子合并成一堆石子的合并方式


状态计算

12.png

const int N = 305;
int s[N];
int f[N][N];
int main() {
  int n;cin >> n;
  for (int i = 1;i <= n;++i)cin >> s[i];
  for (int i = 1; i <= n;++i)s[i] += s[i - 1];
  for(int len = 2; len <= n ;++len){//区间长度
    for (int i = 1;i + len - 1 <= n;++i) {//起点
      int l = i, r = i + len - 1;//区间端点
      f[l][r] = INF;
      for (int k = l;k < r;++k) {//枚举分界线
        f[l][r] = min(f[l][r], f[l][k]+ f[k + 1][r] + s[r] - s[l - 1]);
      }
    }
  }
  cout << f[1][n];
  return 0;
}


目录
相关文章
|
9月前
【每日一题Day114】LC1223 掷骰子模拟 | 记忆化搜索+dp
【每日一题Day114】LC1223 掷骰子模拟 | 记忆化搜索+dp
68 0
|
算法 测试技术 Android开发
LeetCode 周赛上分之旅 #45 精妙的 O(lgn) 扫描算法与树上 DP 问题
学习数据结构与算法的关键在于掌握问题背后的算法思维框架,你的思考越抽象,它能覆盖的问题域就越广,理解难度也更复杂。在这个专栏里,小彭与你分享每场 LeetCode 周赛的解题报告,一起体会上分之旅。
88 2
LeetCode 周赛上分之旅 #45 精妙的 O(lgn) 扫描算法与树上 DP 问题
|
8月前
|
存储 索引
每日刷题——相遇、宝石(模拟+数学)、相助(模拟+数组)、相依(dp的优化)
每日刷题——相遇、宝石(模拟+数学)、相助(模拟+数组)、相依(dp的优化)
49 1
|
9月前
【每日一题Day223】LC1130叶值的最小代价生成树 | 贪心 区间dp
【每日一题Day223】LC1130叶值的最小代价生成树 | 贪心 区间dp
59 0
|
9月前
【每日一题Day165】LC1039多边形三角剖分的最低得分 | 区间dp
【每日一题Day165】LC1039多边形三角剖分的最低得分 | 区间dp
66 0
6 区间DP及其衍生
6 区间DP及其衍生
55 0
|
存储 算法 C语言
【动态规划】LeetCode 312. 戳气球 --区间DP问题
因为一些事,最近状态不是很好,加上今天的每日一题有点难,看的烦躁(就是菜 ,就来更新一下今天与每日一题相关的区间Dp问题(戳气球),这篇也是关于区间Dp的问题 uu可以看看
122 0
|
算法
最短路问题(Floyd解决)--殊途同归
最短路问题(Floyd解决)--殊途同归
|
人工智能
石子合并-区间dp
石子合并-区间dp
90 0
区间DP:合并石子
区间DP:合并石子
71 0