题目链接

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] 成绩单的更多相关文章

  1. 【LOJ2292】[THUSC2016]成绩单(区间DP)

    题目 LOJ2292 分析 比较神奇的一个区间 DP ,我看了很多题解都没看懂,大约是我比较菜罢. 先明确一下题意:abcde 取完 c 后变成 abde ,可以取 bd 这样取 c 后新增的连续段. ...

  2. [BZOJ4897][THUSC2016]成绩单(DP)

    4897: [Thu Summer Camp2016]成绩单 Time Limit: 40 Sec  Memory Limit: 512 MBSubmit: 220  Solved: 132[Subm ...

  3. BZOJ4897 THUSC2016成绩单(区间dp)

    拿走一个区间的代价只与最大最小值有关,并且如果最后一次拿走包含区间右端点的子序列一定不会使答案更劣,于是设f[i][j][x][y]为使i~j区间剩余最小值为x最大值为y且若有数剩余一定包含j的最小代 ...

  4. THUSC2016 成绩单

    题目链接:Click here Solution: 我们设\(f[l][r][x][y]\)表示在原区间\(l\sim r\) 内还未被取走的值最大为\(x\)最小为\(y\)时的代价,这里我们只考虑 ...

  5. [THUSC2016]成绩单 [区间dp]

    简单区间dp. 考虑 \(f_{i,j,mn,mx}\)表示 \(i,j\) 区间的最大值为 \(mx\),最小值为 \(mn\) 的最小花费,\(g_{i,j}\) 为删掉 \([i,j]\) 的最 ...

  6. 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 ...

  7. loj2292 「THUSC 2016」成绩单

    ref 我是傻逼,我啥也不会,这是我抄的. #include <iostream> #include <cstring> #include <cstdio> usi ...

  8. 【THUSC2016】成绩单(bzoj4897)

    $f(i,j,x,y)$ 表示区间 $[i,j]$中,第 $j$ 个数在最后一次操作中才消去,最后一次操作的最大值为 $x$,最小值为 $y$ 时的最小代价: $g(i,j)$ 表示区间 $[i,j] ...

  9. vue初体验:实现一个增删查改成绩单

    前端变化层出不穷,去年NG火一片,今年react,vue火一片,ng硬着头皮看了几套教程,总被其中的概念绕晕,react是faceback出品,正在不断学习中,同时抽时间了解了vue,查看了vue官方 ...

随机推荐

  1. 石子合并(NOI1995)题解

    题目描述 在一个圆形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分. 试设计出1个算法,计算出将N堆石子合并成1 ...

  2. [USACO09DEC] Dizzy Cows 拓扑序

    [USACO09DEC] Dizzy Cows 拓扑序 先对有向边跑拓扑排序,记录下每个点拓扑序,为了使最后的图不存在环,加入的\(p2\)条无向边\(u,v\)必须满足\(u\)拓扑序小于\(v\) ...

  3. 一天一经典Efficient Estimation of Word Representations in Vector Space

    摘要 本文提出了两种从大规模数据集中计算连续向量表示(Continuous Vector Representation)的计算模型架构.这些表示的有效性是通过词相似度任务(Word Similarit ...

  4. 干货 | 10分钟带你掌握branch and price(分支定价)算法超详细原理解析

    00 前言 相信大家对branch and price的神秘之处也非常好奇了.今天我们一起来揭秘该算法原理过程.不过,在此之前,请大家确保自己的branch and bound和column gene ...

  5. Mac OSX上安装SublimeText 3编译Processing 3.0

    1.安装SublimeText 32.使用Preferences - Package Control:Install Package - Processing安装 如果移动了Processing的位置 ...

  6. javascript之随机密码[必包含大写,小写,数字]

    js取两个数字之间的随机数: parseInt(Math.random()*(上限-下限+1)+下限) 如:取1-10之间的随机数   parseInt(Math.random()*(10-1+1)+ ...

  7. 手动停止jquery ajax请求

    主要调用jquery提供的ajax abort方法,详细代码如下: <html> <head> <meta charset="UTF-8"> & ...

  8. NIO Channel 管道

    Java NIO的通道类似流,但又有些不同: 既可以从通道中读取数据,又可以写数据到通道.但流的读写通常是单向的. 通道可以异步地读写. 通道中的数据总是要先读到一个Buffer,或者总是要从一个Bu ...

  9. magento2重写virtualType并且传参

    今天遇到一个需求需要重写一个block,但是这个block是应用virtualType实现,所以需要先重写virtualType,然后却因为参数丢失而获取不到正确的结果.因此,查阅文档,需要用type ...

  10. 【转】史上最强Tomcat8性能优化

    https://blog.csdn.net/ThinkWon/article/details/102744033 文章目录授人以鱼不如授人以渔目的服务器资源Tomcat配置优化Linux环境安装运行T ...