区间dp
GocNeverGiveUp
这个作者很懒,什么都没留下…
展开
-
初识区间dp(石子合并 + 四边形不等式优化 + 环形)
关于石子合并,第一次学习,加上上午的复习回顾,突然感觉dp有点思路了石子合并(线性合并相邻石子)#include<iostream>#include<cstring>#include<cstdio>#include<algorithm>#include<vector>#include<set>#inclu...原创 2018-07-25 15:14:54 · 296 阅读 · 0 评论 -
区间dp学习篇(括号匹配)
括号匹配,根据题目要求求解最大括号匹配数HRBUST - 1834 比如这道题,和石子合并不同的是,题目给定的括号匹配情况需要我们自己更新,不像石子合并中给定数值来的直接,这就需要我们在之前的状态转移方程(dp[i][j] = max(dp[i][j], dp[i][k] + dp[k+1][j])之前加上一个更新当前区间括号匹配情况的判别式(s[i] == s[j] ? 2 : 0),这...原创 2018-08-01 11:33:11 · 477 阅读 · 0 评论 -
区间DP学习篇(整数拆分 + 最优三角剖分)
题目链接整数划分(四)时间限制:1000 ms | 内存限制:65535 KB难度:3输入第一行是一个整数T,表示有T组测试数据接下来T行,每行有两个正整数 n,m ( 1<= n < 10^19, 0 < m <= n的位数);输出输出每组测试样例结果为一个整数占一行样例输入2111 21111 2样例输出111...原创 2018-08-01 16:04:51 · 485 阅读 · 0 评论 -
*UVa 10003 Cutting Sticks(区间dp 切木棍)
UVA - 10003一道区间dp变形,根据紫书的思路 : 设d(i, j)代表切割i ~ j 的最优费用,则d(i, j) = min{d(i,k) + d(k,j) | i < k < j} + a[j] - a[i],其中a[j] - a[i]代表第一刀的费用相当于把每一刀的位置离散化处理,将木棒视为1-n每一个点都可以切割,且最终答案为dp[0][n+1],巧妙地转化成...原创 2018-08-02 19:26:32 · 252 阅读 · 0 评论 -
POJ 1651 Multiplication Puzzle(区间dp学习篇 矩阵链乘)
POJ - 1651紫书上介绍矩阵链乘的时候用的这个转移方程dp[i][j] = min(dp[i][j], dp[i][k] + dp[k+1][j] + a[i-1]*a[k]*a[j]);这道题算是矩阵链乘的变形,同样把“最后一次乘法”变成了第一次,这个思想很重要,倒着推出状态转移方程,汝佳大佬说这很容易就推出来了,emmmmmm,我要不然放弃吧#include<iost...原创 2018-08-03 11:07:44 · 178 阅读 · 0 评论 -
区间dp总结(更新中)
前一阵跟着紫书学了区间dp,趁着还没凉再复习复习1. 石子合并 : 石子合并题目链接 题目要求 : 有n堆石子排成一行,每次选择相邻的两堆石子,将其合并为一堆,记录该次合并的得分为两堆石子个数之和。已知每堆石子的石子个数,求当所有石子合并为一堆时,最小的总得分。 解题思路 : 将每个大的区间划分成最小长度为2的区间,然后逐步扩大寻求最优解,由局部最优达到整体最优 ...原创 2018-08-08 10:11:51 · 924 阅读 · 0 评论 -
Codeforces 958C2 Encryption (medium) (区间dp优化)(*2100)
https://codeforces.com/contest/958/problem/C2这道题是明显的区间dp,我们跑三重for循环,模拟S的长度从1-n,分成的区间数(1-k),用二维数组dp[n][k]表示状态转移方程 f[i][j]=max(f[k][j−1]+(sum[i]−sum[k]+p)modp)(1≤i≤N,1≤j≤K,0≤k<i),其中sum是取模之后的前缀和...原创 2018-12-12 15:59:11 · 280 阅读 · 0 评论