首页 > 其他分享 >区间DP

区间DP

时间:2024-07-02 17:56:01浏览次数:13  
标签:210 int sum fmn 枚举 区间 DP

区间DP

对一段连续的区间进行动态规划,使其达到预期

特点

合并:即将两个或多个部分进行整合,当然也可以反过来;

特征:能将问题分解为能两两合并的形式;

求解:对整个问题设最优值,枚举合并点,将问题分解为左右两个部分,最后合并两个部分的最优值得到原问题的最优值。

特别——链变环

对于原区间是链,不能计算从后到前的问题,最常用法是把链后接链,变成相对的环;如1,2,-,n,1,2,-,n;

例题

https://www.luogu.com.cn/problem/P1880

令 f(i,j) 表示将区间 [i,j] 内的所有石子合并到一起的最大得分。
状态转移方程: f(i,j)=max(min){f(i,k)+f(k+1,j)+sum[j]-sum[i-1] }。sum_i 表示 a 数组的前缀和

先对区间长度len枚举(2<=len<=n);
然后枚举区间左端点i(2<=i<=2*n-len),同时得出右端点j;
最后枚举合并点k(i<=k<j);

Code

点击查看代码
const int maxn = 2e5 + 10;
int n, a[110];
int sum[210], fmx[210][210], fmn[210][210];
void solve() {
    cin >> n;
    memset(fmn, MAXN, sizeof(fmn));
    for (int i = 1; i <= n; i++) {
        cin >> a[i];
        sum[i]    = sum[i - 1] + a[i];
        fmn[i][i] = 0;
    }
    for (int i = 1; i < n; i++) {
        sum[i + n]        = sum[i + n - 1] + a[i];
        fmn[i + n][i + n] = 0;
    }
    int mx = 0, mn = MAXN;
    for (int len = 2; len <= n; len++) {
        for (int i = 1; i <= 2 * n - len; i++) {
            int j = i + len - 1;
            for (int k = i; k < j; k++) {
                fmx[i][j] = max(fmx[i][j], fmx[i][k] + fmx[k + 1][j] + sum[j] - sum[i - 1]);
                fmn[i][j] = min(fmn[i][j], fmn[i][k] + fmn[k + 1][j] + sum[j] - sum[i - 1]);
            }
        }
        if (len == n) {
            for (int i = 1; i <= n; i++) {
                mx = max(mx, fmx[i][i + n - 1]);
                mn = min(mn, fmn[i][i + n - 1]);
            }
        }
    }
    cout << mn << '\n' << mx;
}

细节

小优化:变环后的链只用到n-1就行;

对于求最小的结果,需要预先对fmn赋一个MAXN,再对每一个fmn[i][i]赋0:合并自身不需代价

标签:210,int,sum,fmn,枚举,区间,DP
From: https://www.cnblogs.com/uanQ/p/18280288

相关文章

  • 背包DP——依赖背包
    依赖背包部分物品对其他物品有依赖性,即在拥有b前,必须拥有a;其本质是分组背包,不过具有特殊性,即依赖条件先来看简单依赖(存在b依赖a,但不存在c依赖b)在选择时,要么只选a,要么选a和依赖a的部分/全部解法,对每个选的集合分组,组内冲突(只能选一个),重新构造01背包的数据对于小依赖,直接枚举......
  • 如何更改Wordpress语言为中文
    在使用WordPress的时候,一般安装默认语言是英文,可以在后台设置里面直接修改站点语言为简体中文,当后台没有语言选项框的这一栏,如下图所示,该怎么办呢? 这个时候我们可以找到文件wp-config.php文件,添加一行代码  define('WPLANG','zh_CN');  保存后,然后我们回到后台到设置......
  • QOJ2376 Game on a Tree (树形 dp)
    QOJ2376GameonaTree树形dp因为题目限制对于两个人等价,所以朴素的,考虑将\(u\)与祖先和后代连边,构成一个新的无向图。那么题目就变成:在无向图中选一点,每一次操作就是走一步到新的点,谁先不能走,那么另一个人获胜。先说结论:当无向图有完美匹配时,后手胜,反之先手胜。证明:若有......
  • java 查询日期列表月末对应上月末,季度末对应上季度末,年末对应上年末,取列表月度,季度,年
    packagecom.dc.galaxydata.model;importcom.dc.common.util.DateUtil;importjava.util.ArrayList;importjava.util.Date;publicclassEndDates{publicstaticvoidmain(String[]args){ArrayList<Date>dateList=newArrayList<>(......
  • 解决TensorFlow中的FailedPreconditionError:未初始化的变量
    解决TensorFlow中的FailedPreconditionError:未初始化的变量......
  • 【面试题】网络UDP协议(第五篇)
    1.UDP如何实现可靠?UDP协议是面向无连接的、不可靠的传输层协议,可以通过在应用层添加一些机制来实现UDP的可靠传输。序列号和确认应答机制:为每个发送的数据包分配一个唯一的序列号,并且要求接收方发送确认应答来确认已经收到数据包。重传机制:在数据发出后,如果超过某个时间没......
  • WordPress 5.5+ 如何自定义XML 站点地图功能
    关键要点在WordPress5.5中,WordPress将导出一个站点地图索引文件/wp-sitemap.xml。这是主要的XML文件,其中包含WordPress网站公开的所有站点地图页面的列表。该站点地图索引最多可容纳50000个站点地图,单个站点地图最多可容纳2000个条目(可过滤)。默认情况下,将为所有公开和可公开查......
  • 玄机——第四章 windows实战-wordpress wp
    文章目录一、前言二、概览简介三、参考文章四、步骤(解析)准备阶段1.01.1请提交攻击者攻击成功的第一时间,格式:flag{YY:MM:DDhh:mm:ss}1.2请提交攻击者的浏览器版本flag{Firgfox/2200}1.3请提交攻击者目录扫描所使用的工具名称1.4找到攻击者写入的恶意后门文件,提交文......
  • 2.2.4 C#中显示控件BDPictureBox 的实现----ROI交互
    2.2.4C#中显示控件BDPictureBox的实现----ROI交互1界面效果在设定模式下,可以进行ROI框的拖动,这里以Rect1举例说明2增加ROI类定义///<summary>///ROI_single///用于描述图片感兴趣区域///type:0:Rect1;1:Rect2;2:Circle;3:Ellipse;4:Arc;5:Polygen;6:Poi......
  • 【使用sudo apt-get出现报错】——无法获得锁 /var/lib/dpkg/lock-open(11:资 源暂时
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、ubuntu中进程正在被占用1.问题描述2.原因分析3.解决总结前言一、ubuntu中进程正在被占用1.问题描述在Ubuntu中,使用终端时输入带有sudoapt-get指令更新软件包时,出现如下的报......