简单区间dp. 考虑 \(f_{i,j,mn,mx}\)表示 \(i,j\) 区间的最大值为 \(mx\),最小值为 \(mn\) 的最小花费,\(g_{i,j}\) 为删掉 \([i,j]\) 的最小花费.目标答案:\(g_{1,n}\) 我们容易发现这个状态可以由区间 \([L,R-1]\) 和 \([R,R]\) 合并起来,即加入一个 \(v_r\) ,第一个转移方程 \(f_{i,j,\min(mn,v_r),\max(mx,v_r)} = \min \{f_{i,j-1,mn,mx}\…
题目描述 给你一个数列,每次你可以选择连续的一段,付出 $a+b\times 极差^2$ 的代价将其删去,剩余部分拼到一起成为新的数列继续进行此操作.求将原序列全部删去需要的最小总代价是多少. 输入 第一行包含一个正整数n,表示成绩单的数量. 第二行包含两个非负整数a,b,表示给定的评估参数. 第三行包含n个正整数w_i,表示第i张成绩单上的分数. 输出 仅一个正整数,表示最小的代价是多少. 样例输入 103 17 10 9 10 6 7 10 7 1 2 样例输出 15 题解 区间dp 对于这…
BZOJ 显然是个区间DP.令\(f[l][r]\)表示全部消掉区间\([l,r]\)的最小花费. 因为是可以通过删掉若干子串来删子序列的,所以并不好直接转移.而花费只与最大最小值有关,所以再令\(g[l][r][j][k]\)表示将区间\([l,r]\)中的数删到只剩下权值在\([j,k]\)中的数的最小花费(也就是让剩下数的最小值为\(j\),最大值为\(k\),最后一次取走\([j,k]\)这些数来删掉整个\([l,r]\)).为了方便转移强制右端点\(r\)保留,同整个区间最后一起删掉.…
题目:https://loj.ac/problem/2292 直接 DP 很难做,主要是有那种 “一个区间内部有很多个别的区间” 的情况. 自己想了一番枚举 max-min 的最大限制,然后在该基础上最小化区间个数之类的.还是不会. 看了题解才会. 考虑再设一个 dp 数组来辅助表示那种麻烦的情况. 值可以离散化!又因为代价与值有关,可以考虑把值放进角标里. 令 f[ i ][ j ] 表示把 [ i , j ] 全取完的最小代价,g[ i ][ j ][ l ][ r ] 表示把 [ i ,…
题目链接 LOJ:https://loj.ac/problem/2292 洛谷:https://www.luogu.org/problemnew/show/P5336 Solution 区间\(\rm dp\),状态比较难想...为啥网上好多仙人说这题很蠢,可能是我太菜了吧 设\(f[l][r]\)表示\([l,r]\)消完的最小代价,\(g[l][r][x][y]\)表示把\([l,r]\)的值域消成\([x,y]\)的最小代价. 注意这题只需要大小关系,所以可以离散化. 转移就很好办了,先转…
题目 LOJ2292 分析 比较神奇的一个区间 DP ,我看了很多题解都没看懂,大约是我比较菜罢. 先明确一下题意:abcde 取完 c 后变成 abde ,可以取 bd 这样取 c 后新增的连续段.因此这题需要区间 DP. 能发现取一段区间的代价只与这段区间的最大值和最小值有关.那么用 \(f_{i,j,l,r}\) 表示将区间 \([i,j]\) 取到只剩下值在 \([l,r]\) 中的数的最小代价,\(g_{i,j}\) 表示取完区间 \([i,j]\) 的最小代价,则 \(g_{1,n}…
拿走一个区间的代价只与最大最小值有关,并且如果最后一次拿走包含区间右端点的子序列一定不会使答案更劣,于是设f[i][j][x][y]为使i~j区间剩余最小值为x最大值为y且若有数剩余一定包含j的最小代价,特别地f[i][j][0][0]表示取完i~j区间的最小代价.转移时考虑j最后和哪一段一起拿走,有f[i][j][min(x,a[j])][max(y,a[j])]=min{f[i][d-1][x][y]+f[d][j-1][0][0]},这样就能处理拿走一段后区间的合并了. 区间dp好难啊.…
4897: [Thu Summer Camp2016]成绩单 Time Limit: 40 Sec  Memory Limit: 512 MBSubmit: 220  Solved: 132[Submit][Status][Discuss] Description 期末考试结束了,班主任L老师要将成绩单分发到每位同学手中.L老师共有n份成绩单,按照编号从1到n的顺序叠 放在桌子上,其中编号为i的成绩单分数为w_i.成绩单是按照批次发放的.发放成绩单时,L老师会从当前的一叠 成绩单中抽取连续的一段…
Prelude 快THUWC了,所以补一下以前的题. 真的是一道神题啊,网上的题解没几篇,而且还都看不懂,我做了一天才做出来. 传送到LOJ:(>人<:) Solution 直接切入正题. 我们考虑区间dp,第一件事是离散化. 然后用\(g(i,j)\)表示消除完闭区间\([i,j]\)的最小费用. 然后呢?怎么转移?exm??? 这时候会有一个非常自然的想法. 计算\(g(i,j)\)的时候,我们枚举两个数\(l,r\),然后保留下值在闭区间\([l,r]\)之内的所有数,先消除掉其他的数字…
区间\(dp\)提升复习 不得不说这波题真的不简单... 技巧总结: 1.有时候转移可以利用背包累和 2.如果遇到类似区间添加限制的题可以直接把限制扔在区间上,每次只考虑\([l,r]\)被\([i,j]\)完全包含的情况 [BZOJ4897] [Thu Summer Camp2016] 成绩单 典型的利用背包转移,\(dp[i][j]\)表示处理完这段\([i,j]\)区间的答案 转移时一段区间可以被先处理掉或者直接从已经处理完的\(dp[i][j]\)中取过来,这个可以用一个背包维护 con…