[LOJ2292] [THUSC2016] 成绩单
题目链接
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]\)的最小代价。
注意这题只需要大小关系,所以可以离散化。
转移就很好办了,先转移\(g\),枚举\(r\)号元素删不删,然后在由\(g\)转移\(f\),具体看下代码注释吧。
复杂度\(O(n^5)\)。
Code
#include<bits/stdc++.h>
using namespace std;
void read(int &x) {
x=0;int f=1;char ch=getchar();
for(;!isdigit(ch);ch=getchar()) if(ch=='-') f=-f;
for(;isdigit(ch);ch=getchar()) x=x*10+ch-'0';x*=f;
}
void print(int x) {
if(x<0) putchar('-'),x=-x;
if(!x) return ;print(x/10),putchar(x%10+48);
}
void write(int x) {if(!x) putchar('0');else print(x);putchar('\n');}
#define lf double
#define ll long long
#define pii pair<int,int >
#define vec vector<int >
#define pb push_back
#define mp make_pair
#define fr first
#define sc second
#define FOR(i,l,r) for(int i=l,i##_r=r;i<=i##_r;i++)
const int maxn = 55;
const int inf = 1e9;
const lf eps = 1e-8;
const int mod = 1e9+7;
int f[55][55],g[55][55][55][55],v[maxn],t[maxn],n,a,b,m;
void init() {
read(n),read(a),read(b);
FOR(i,1,n) read(v[i]),t[i]=v[i];
sort(t+1,t+n+1);m=unique(t+1,t+n+1)-t-1;
FOR(i,1,n) v[i]=lower_bound(t+1,t+m+1,v[i])-t;
}
void chmin(int &x,int y) {if(x>y) x=y;}
void chmax(int &x,int y) {if(x<y) x=y;}
#define sqr(x) ((x)*(x))
int main() {
init();
memset(f,63,sizeof f);
memset(g,63,sizeof g);
FOR(i,1,n) {
f[i][i]=a;
FOR(l,1,m) FOR(r,l,m)
if(l<=v[i]&&v[i]<=r) g[i][i][l][r]=0;
else g[i][i][l][r]=a; //初值注意下
}
for(int len=2;len<=n;len++)
for(int l=1;l<=n-len+1;l++) {
int r=l+len-1;
for(int x=1;x<=m;x++)
for(int y=x;y<=m;y++) {
if(x<=v[r]&&v[r]<=y) chmin(g[l][r][x][y],g[l][r-1][x][y]); // 不删r
for(int k=l+1;k<=r;k++)
chmin(g[l][r][x][y],g[l][k-1][x][y]+f[k][r]); // 删r,枚举包括r的区间
chmin(f[l][r],g[l][r][x][y]+a+b*sqr(t[y]-t[x])); //转移f
}
}
write(f[1][n]);
return 0;
}
[LOJ2292] [THUSC2016] 成绩单的更多相关文章
- 【LOJ2292】[THUSC2016]成绩单(区间DP)
题目 LOJ2292 分析 比较神奇的一个区间 DP ,我看了很多题解都没看懂,大约是我比较菜罢. 先明确一下题意:abcde 取完 c 后变成 abde ,可以取 bd 这样取 c 后新增的连续段. ...
- [BZOJ4897][THUSC2016]成绩单(DP)
4897: [Thu Summer Camp2016]成绩单 Time Limit: 40 Sec Memory Limit: 512 MBSubmit: 220 Solved: 132[Subm ...
- BZOJ4897 THUSC2016成绩单(区间dp)
拿走一个区间的代价只与最大最小值有关,并且如果最后一次拿走包含区间右端点的子序列一定不会使答案更劣,于是设f[i][j][x][y]为使i~j区间剩余最小值为x最大值为y且若有数剩余一定包含j的最小代 ...
- THUSC2016 成绩单
题目链接:Click here Solution: 我们设\(f[l][r][x][y]\)表示在原区间\(l\sim r\) 内还未被取走的值最大为\(x\)最小为\(y\)时的代价,这里我们只考虑 ...
- [THUSC2016]成绩单 [区间dp]
简单区间dp. 考虑 \(f_{i,j,mn,mx}\)表示 \(i,j\) 区间的最大值为 \(mx\),最小值为 \(mn\) 的最小花费,\(g_{i,j}\) 为删掉 \([i,j]\) 的最 ...
- PKUSC2018训练日程(4.18~5.30)
(总计:共66题) 4.18~4.25:19题 4.26~5.2:17题 5.3~5.9: 6题 5.10~5.16: 6题 5.17~5.23: 9题 5.24~5.30: 9题 4.18 [BZO ...
- loj2292 「THUSC 2016」成绩单
ref 我是傻逼,我啥也不会,这是我抄的. #include <iostream> #include <cstring> #include <cstdio> usi ...
- 【THUSC2016】成绩单(bzoj4897)
$f(i,j,x,y)$ 表示区间 $[i,j]$中,第 $j$ 个数在最后一次操作中才消去,最后一次操作的最大值为 $x$,最小值为 $y$ 时的最小代价: $g(i,j)$ 表示区间 $[i,j] ...
- vue初体验:实现一个增删查改成绩单
前端变化层出不穷,去年NG火一片,今年react,vue火一片,ng硬着头皮看了几套教程,总被其中的概念绕晕,react是faceback出品,正在不断学习中,同时抽时间了解了vue,查看了vue官方 ...
随机推荐
- Doors Breaking and Repairing
题目链接:Doors Breaking and Repairing 题目大意:有n个门,先手攻击力为x(摧毁),后手恢复力为y(恢复),输入每个门的初始“生命值”,当把门的生命值攻为0时,就无法恢复了 ...
- 关于 Mercury_Lc 说明
现在还主要在用 csdn 写博客,博客地址:https://blog.csdn.net/Mercury_Lc 这个是因为好奇,点了一下 一键搬家 ,就酱紫了. 主要更新,前往这个网址 https:// ...
- Luogu3379 【模板】最近公共祖先(LCA)
题面 题解 这里讲一种硬核做法. 首先\(\mathrm{dfs}\)整棵树,求出这棵树的欧拉序,然后\(\mathrm{LCA}\)问题就变成了\(\pm 1\mathrm{RMQ}\)问题. 考虑 ...
- vim 注释颜色
方法一 修改 vim 配置文件 /etc/vim/vimrc (1)用vim打开 /etc/vim/vimrc文件 (2)按大写 ‘G’ 到最后一行,插入 hi comment ctermfg=6 ...
- python的tecplot模块(tecplot新特性)
Python的tecplot模块仅支持tecplot2017以上 首先安装tecplot2017 安装完成以后,安装python的tecplot模块 可以通过终端转入tecplot安装目录下的pyte ...
- js注册表单中实现地区选择效果
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- tomcat启动报错java.lang.OutOfMemoryError:PermGen space解决办法
tomcat启动错误提示: 严重: Error waiting for multi-thread deployment of WAR files to completejava.util.concur ...
- ajax请求传base64太大,springboot后台无法接收
ajax请求传base64太大,springboot后台无法接收 .具体体现形式:对应属性值为null 在 application.yml中添加: server: tomcat: max-http-p ...
- Python 拼接字符串的几种方式
在学习Python(3x)的过程中,在拼接字符串的时候遇到了些问题,所以抽点时间整理一下Python 拼接字符串的几种方式. 方式1,使用加号(+)连接,使用加号连接各个变量或者元素必须是字符串类型( ...
- 详解CI、CD相关概念
CI:持续集成(CONTINUOUS INTEGRATION)基本概念CI的全称是Continuous Integration,表示持续集成. 在CI环境中,开发人员将会频繁地向主干提交代码.这些新提 ...