BZOJ 4897: [Thu Summer Camp2016]成绩单 动态规划
Description
.jpg)
Input
Output
这是一个非常神仙的区间 DP.
令 $g[l][r][i][j]$ 表示将区间 $[l,r]$ 删至所有权值都在 $[i,j]$ 之内的最小代价.
令 $f[l,r]$ 表示将 $[l,r]$ 区间全部删掉的最小代价.
上一次的更新更新完了 $r-1$,所以说 $g[l][r-1]$ 都是可以用于更新 $g[l][r]$ 的.
考虑新加入 $r$, 那么要分成两种情况:
1. 没有被删掉,即和权值在 $[i,j]$ 之内的连续子序列构成了一个新的序列.
2. 被删掉,即 $r$ 不会影响到任何决策.
写成状态转移:
1. $g[l][r-1][i][j]\Rightarrow g[l][r][min(i,w[r])][max(j,w[r])]$
2. $g[l][k][i][j]+f[k+1][r]\Rightarrow g[l][r][i][j]$
由于这是区间 $DP$,所以区间长度更小的已经被解决掉了,所以转移是完全合法的.
动态规划的一个小窍门就是每次可以指定什么什么东西,比如这次就指定了每次只加入右端点.
#include <cstdio>
#include <cstring>
#include <algorithm>
#define N 52
#define setIO(s) freopen(s".in", "r" , stdin)
int w[N], v[N], f[N][N], g[N][N][N][N];
inline void getmin(int &a, int b)
{
if(b < a) a = b;
}
int main()
{
// setIO("input");
int n, A, B, i, j, len;
scanf("%d%d%d", &n , &A, &B), memset(f, 0x3f, sizeof(f)), memset(g, 0x3f, sizeof(g));
for(i = 1; i <= n ; ++ i) scanf("%d", &w[i]), v[i] = w[i];
std :: sort(v + 1, v + 1 + n);
for(i = 1; i <= n ; ++ i)
{
w[i] = std :: lower_bound(v + 1, v + 1 + n, w[i]) - v;
f[i][i] = A, g[i][i][w[i]][w[i]] = 0;
}
for(len = 2; len <= n ; ++ len)
{
int l, r, k;
for(l = 1; l + len - 1 <= n ; ++ l)
{
r = l + len - 1;
for(i = 1; i <= n ; ++ i)
{
for(j = i; j <= n ; ++ j)
getmin( g[l][r][std :: min(i, w[r])][std :: 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)
getmin(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)
getmin(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;
}
BZOJ 4897: [Thu Summer Camp2016]成绩单 动态规划的更多相关文章
- 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
题目描述 给你一个数列,每次你可以选择连续的一段,付出 $a+b\times 极差^2$ 的代价将其删去,剩余部分拼到一起成为新的数列继续进行此操作.求将原序列全部删去需要的最小总代价是多少. 输入 ...
- bzoj4897 [Thu Summer Camp2016]成绩单
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=4897 [题解] 第一次看这题想的是f[l,r]的区间dp发现仅记录这两个好像不能转移啊 会出 ...
- BZOJ4897 [Thu Summer Camp2016]成绩单 【dp】
题目链接 BZOJ4897 题解 发现我们付出的代价与区间长度无关,而与区间权值范围有关 离散化一下权值 我们设\(f[l][r][x][y]\)表示区间\([l,r]\)消到只剩权值在\([x,y] ...
- BZOJ 4896: [Thu Summer Camp2016]补退选
trie树+vector+二分 别忘了abs(ans) #include<cstdio> #include<algorithm> #include<vector> ...
- BZOJ 4896 :[Thu Summer Camp2016]补退选 Trie树+Vector
4896: [Thu Summer Camp2016]补退选 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 315 Solved: 97[Submi ...
- 【BZOJ4896】[Thu Summer Camp2016]补退选 Trie树
[BZOJ4896][Thu Summer Camp2016]补退选 Description X是T大的一名老师,每年他都要教授许多学生基础的C++知识.在T大,每个学生在每学期的开学前都需要选课,每 ...
- bzoj 3522 / 4543 [POI 2014] Hotel - 动态规划 - 长链剖分
题目传送门 bzoj 3522 需要root权限的传送点 bzoj 4543 快速的传送点 慢速的传送点 题目大意 给定一棵树,问有多少个无序三元组$(x, y, z)$使得这三个不同点在树上两两距离 ...
随机推荐
- mysql——多表——外连接查询——左连接、右连接、复合条件查询
), d_id ), name ), age ), sex ), homeadd ) ); ,,,'nan','beijing'); ,,,'nv','hunan'); ,,,'nan','jiang ...
- Python 正则匹配网页内的IP地址及端口号
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Date : 2017-08-30 20:38:23 # @Author : EnderZhou (z ...
- Node.js 博客搭建
Node.js 博客搭建:https://www.linuxidc.com/Linux/2017-02/140115.htm https://www.cnblogs.com/mrcln/p/93087 ...
- keepalived 容器在宿主机重启后无法启动问题:报错:daemon is already running
初步猜测原因是:keepalived容器内的keepalived.pid文件在keepalived容器非正常退出时,没有正确删除,造成第二次启动时容器检查到pid文件已经存在,认为该进程已经存在,因为 ...
- numpy-查找操作大全
本文记录日常工作中遇到的查找操作,持续更新. 注意:输入必须是 数组,不能是 list 极值 min,max 返回极值 argmin(a, axis=None, out=None), 返回极值所在的位 ...
- mybatis一对一关联关系映射
mybatis一对一关联关系映射 在关联关系中,有一对一,一对多,多对多三种关联关系. 一对一关系:在操作上,任意一方引入对方的主键作为外键. 一对多关系:在"多"的一方添加&qu ...
- vue组件之间通信的8种方式
对于vue来说,组件之间的消息传递是非常重要的,下面是我对组件之间消息传递的常用方式的总结. props和$emit(常用) $attrs和$listeners 中央事件总线(非父子组件间通信) v- ...
- vue-注册全局过滤器
import Vue from 'vue'; import dayjs from 'dayjs'; const filters = { formatDate(date, format = 'YYYY- ...
- vue.js(4)--字符串跑马灯
制作一个字符串的跑马灯效果 (1)实例代码 <!DOCTYPE html> <html lang="en"> <head> <meta c ...
- PDF转图片,在线PDF转JPG/PNG
[在线DEMO](https://oktools.net/pdf2img) 原理 使用pdf.js预览图片,pdf.js将pdf通过canvas将每一页渲染出来,然后我们通过canvas的toData ...