【bzoj4897】[Thu Summer Camp2016]成绩单 区间dp
题目描述
输入
输出
样例输入
10
3 1
7 10 9 10 6 7 10 7 1 2
样例输出
15
题解
区间dp
对于这种删除连续一段,剩下的拼到一起的问题:把操作对应到原序列上,相当于一些要么包含要么相离的操作。
相离的情况显然是区间dp,设 $f[l][r]$ 表示将原序列的 $[l,r]$ 全部删掉所需的最小总代价。
对于包含的情况,也可以使用区间dp来解决。具体方法是:同时维护转移到一半时的状态。如下图(先删b~c再删a~d):

记录从a转移到b的状态,dp得知bc可以用某代价消掉,进而推知a转移到c的状态,继续转移到d即可。
由于极差之和最大值与最小值有关,因此离散化后设 $g[l][r][i][j]$ 表示将 $[l,r]$ 删至剩下的数最小值为 $i$ ,最大值为 $j$ 的最小代价。
那么每次dp区间 $[l,r]$ ,最后一个位置 $r$ 的转移有两种情况:
- 和前面的 $[l,r-1]$ 放到一起删除,这样的话 $r$ 会影响最小值与最大值,相应的有 $g[l][r][\text{min}(i,w[r])][\text{max}(i,w[r])]=g[l][r-1][i][j]$ ;
- 和后面的某一段 $[k+1,r]$ 作为被包含的子区间删除,这样的话枚举 $k$ ,有 $g[l][r][i][j]=g[l][k][i][j]+f[k+1][r]$ 。
处理完这个区间的 $g[l][r][][]$ 后处理 $f[l][r]$ ,显然依题意有 $f[l][r]=g[l][r][i][j]+a+b\times(j-i)^2$ 。
最后的答案就是 $f[1][n]$ 。
时间复杂度 $O(n^5)$ ,常数极小可以通过。
注意边界问题什么的。
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int w[52] , v[52] , f[52][52] , g[52][52][52][52];
inline void gmin(int &x , int y)
{
x > y ? x = y : 0;
}
int main()
{
int n , a , b , len , i , j , k , l , r;
scanf("%d%d%d" , &n , &a , &b);
for(i = 1 ; i <= n ; i ++ ) scanf("%d" , &w[i]) , v[i] = w[i];
sort(v + 1 , v + n + 1);
memset(f , 0x3f , sizeof(f)) , memset(g , 0x3f , sizeof(g));
for(i = 1 ; i <= n ; i ++ ) w[i] = lower_bound(v + 1 , v + n + 1 , w[i]) - v , g[i][i][w[i]][w[i]] = 0 , f[i][i] = a;
for(len = 2 ; len <= n ; len ++ )
{
for(l = 1 ; l <= n - len + 1 ; l ++ )
{
r = l + len - 1 , g[l][r][w[r]][w[r]] = f[l][r - 1];
for(i = 1 ; i <= n ; i ++ )
for(j = i ; j <= n ; j ++ )
gmin(g[l][r][min(i , w[r])][max(j , w[r])] , g[l][r - 1][i][j]);
for(k = l ; k < r ; k ++ )
for(i = 1 ; i <= n ; i ++ )
for(j = i ; j <= n ; j ++ )
gmin(g[l][r][i][j] , g[l][k][i][j] + f[k + 1][r]);
for(i = 1 ; i <= n ; i ++ )
for(j = i ; j <= n ; j ++ )
gmin(f[l][r] , g[l][r][i][j] + a + b * (v[j] - v[i]) * (v[j] - v[i]));
}
}
printf("%d\n" , f[1][n]);
return 0;
}
【bzoj4897】[Thu Summer Camp2016]成绩单 区间dp的更多相关文章
- BZOJ.4897.[Thu Summer Camp2016]成绩单(区间DP)
BZOJ 显然是个区间DP.令\(f[l][r]\)表示全部消掉区间\([l,r]\)的最小花费. 因为是可以通过删掉若干子串来删子序列的,所以并不好直接转移.而花费只与最大最小值有关,所以再令\(g ...
- BZOJ4897: [Thu Summer Camp2016]成绩单【DP of DP】
Description 期末考试结束了,班主任L老师要将成绩单分发到每位同学手中.L老师共有n份成绩单,按照编号从1到n的顺序叠 放在桌子上,其中编号为i的成绩单分数为w_i.成绩单是按照批次发放的. ...
- BZOJ4897 [Thu Summer Camp2016]成绩单 【dp】
题目链接 BZOJ4897 题解 发现我们付出的代价与区间长度无关,而与区间权值范围有关 离散化一下权值 我们设\(f[l][r][x][y]\)表示区间\([l,r]\)消到只剩权值在\([x,y] ...
- bzoj4897 [Thu Summer Camp2016]成绩单
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=4897 [题解] 第一次看这题想的是f[l,r]的区间dp发现仅记录这两个好像不能转移啊 会出 ...
- BZOJ 4897: [Thu Summer Camp2016]成绩单 动态规划
Description 期末考试结束了,班主任L老师要将成绩单分发到每位同学手中.L老师共有n份成绩单,按照编号从1到n的顺序叠 放在桌子上,其中编号为i的成绩单分数为w_i.成绩单是按照批次发放的. ...
- [THUSC2016]成绩单 [区间dp]
简单区间dp. 考虑 \(f_{i,j,mn,mx}\)表示 \(i,j\) 区间的最大值为 \(mx\),最小值为 \(mn\) 的最小花费,\(g_{i,j}\) 为删掉 \([i,j]\) 的最 ...
- LOJ 2292 「THUSC 2016」成绩单——区间DP
题目:https://loj.ac/problem/2292 直接 DP 很难做,主要是有那种 “一个区间内部有很多个别的区间” 的情况. 自己想了一番枚举 max-min 的最大限制,然后在该基础上 ...
- 区间dp提升复习
区间\(dp\)提升复习 不得不说这波题真的不简单... 技巧总结: 1.有时候转移可以利用背包累和 2.如果遇到类似区间添加限制的题可以直接把限制扔在区间上,每次只考虑\([l,r]\)被\([i, ...
- BZOJ4897 THUSC2016成绩单(区间dp)
拿走一个区间的代价只与最大最小值有关,并且如果最后一次拿走包含区间右端点的子序列一定不会使答案更劣,于是设f[i][j][x][y]为使i~j区间剩余最小值为x最大值为y且若有数剩余一定包含j的最小代 ...
随机推荐
- pgpool-II的master-slave模式的分析
磨砺技术珠矶,践行数据之道,追求卓越价值 回到上一级页面: PostgreSQL集群方案相关索引页 回到顶级页面:PostgreSQL索引页 现象描述: 客户来邮件,问:为何Pgpool-II ...
- 【转载】GC基本算法及C++GC机制
原文: GC基本算法及C++GC机制 阅读目录 前言 基本概念 有向可达图与根集 三种基本的垃圾收集算法及其改进算法 1.引用计数算法 2. Mark & Sweep 算法 3. 节点复制算法 ...
- Yii 2.0 Gridview源码分析
GridView yii\grid\GridView 作用:GridView是Yii中的一个Widget,用来展示数据表格.有排序,分页和过滤功能. GridView默认界面如下.这是用Gii生成的. ...
- StringUtils工具类用法
/*1.字符串以prefix开始*/ StringUtils.startsWith("sssdf","");//结果是:true StringUtils.sta ...
- Spring学习(一)-----Spring 模块详解
官方下载链接:http://repo.spring.io/release/org/springframework/spring/ Spring 模块详解: Core 模块 spring-beans-3 ...
- 二、利用EnterpriseFrameWork快速开发Web系统(B/S)
EnterpriseFrameWork框架实例源代码下载: 实例下载 本章通过一个开发实例来讲解Web系统的开发经过,以及会碰到的一些问题.实例功能就是业务系统中最常见的增.删.改.查来演示,用一个界 ...
- GitHub中webhooks的使用
目录 GitHub中的webhooks的配置 对配置的webhooks的进行测试 目前在团队在设计一个应用管理的功能,需要了解到常用代码托管的Webhooks的使用.GitHub中的webhooks首 ...
- 【SpringCloud】第十一篇: 断路器监控(Hystrix Dashboard)
前言: 必需学会SpringBoot基础知识 简介: spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理.服务发现.断路器.路由.微代理.事件总线.全局锁.决策竞选. ...
- tomcat配置https | 自签发证书配置
未配置证书的访问:
- LeeCode_01_Two sum
Two Sum Given an array of integers, return indices of the two numbers such that they add up to a spe ...