loj

看着就很区间dp,所以考虑求\(f_{i,j}\)表示区间\([i,j]\)的答案.注意到贡献答案的方式是每次选一个连续段,拿走后剩下的段拼起来继续段,所以转移就考虑从最后一次选的方法转移过来,那么最后一次选的是原序列的一个连续段中挖掉一些小连续段的一些段.设辅助状态\(g_{i,j,p,q}\)表示区间\([i,j]\)要选出一个连续段,其中最小值为\(p\),最大值为\(q\)的最小代价,转移可以在左右两边接上一个\(f_{i,j}\)(这一段不在最终段中),或者接上一个在段内的元素,并更新最大值/最小值.最后用\(g\)更新\(f\),大概为\(f_{i,j}=\min(a+g_{i,j,p,q}+b(q-p)^2)\)

#include<bits/stdc++.h>
#define LL long long
#define uLL unsigned long long
#define db double using namespace std;
const int N=55,mod=1e9+7;
int rd()
{
int x=0,w=1;char ch=0;
while(ch<'0'||ch>'9'){if(ch=='-') w=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
return x*w;
}
int n,a,b,t,w[N],bb[N],f[N][N],g[N][N][N][N]; int main()
{
n=rd(),a=rd(),b=rd();
for(int i=1;i<=n;++i) w[i]=bb[i]=rd();
sort(bb+1,bb+n+1),t=unique(bb+1,bb+n+1)-bb-1;
for(int i=1;i<=n;++i) w[i]=lower_bound(bb+1,bb+t+1,w[i])-bb;
memset(f,0x3f3f3f,sizeof(f)),memset(g,0x3f3f3f,sizeof(g));
for(int i=1;i<=n;++i) f[i][i]=a,g[i][i][w[i]][w[i]]=0;
for(int i=1;i<=n;++i)
{
g[i-1][i][w[i]][w[i]]=min(g[i-1][i][w[i]][w[i]],g[i][i][w[i]][w[i]]+f[i-1][i-1]);
g[i][i+1][w[i]][w[i]]=min(g[i][i+1][w[i]][w[i]],g[i][i][w[i]][w[i]]+f[i+1][i+1]);
int np=min(w[i],w[i-1]),nq=max(w[i],w[i-1]);
g[i-1][i][np][nq]=min(g[i-1][i][np][nq],g[i][i][w[i]][w[i]]);
np=min(w[i],w[i+1]),nq=max(w[i],w[i+1]);
g[i][i+1][np][nq]=min(g[i][i+1][np][nq],g[i][i][w[i]][w[i]]);
}
for(int l=1;l<n;++l)
for(int i=1,j=l+1;j<=n;++i,++j)
{
for(int p=1;p<=t;++p)
for(int q=p;q<=t;++q)
{
for(int k=i;k<j;++k)
g[i][j][p][q]=min(g[i][j][p][q],min(g[i][k][p][q]+f[k+1][j],g[k+1][j][p][q]+f[i][k]));
int np=min(p,w[i-1]),nq=max(q,w[i-1]);
g[i-1][j][np][nq]=min(g[i-1][j][np][nq],g[i][j][p][q]);
np=min(p,w[j+1]),nq=max(q,w[j+1]);
g[i][j+1][np][nq]=min(g[i][j+1][np][nq],g[i][j][p][q]);
f[i][j]=min(f[i][j],a+g[i][j][p][q]+b*(bb[q]-bb[p])*(bb[q]-bb[p]));
}
}
printf("%d\n",f[1][n]);
return 0;
}

loj 2292「THUSC 2016」成绩单的更多相关文章

  1. LOJ 2292 「THUSC 2016」成绩单——区间DP

    题目:https://loj.ac/problem/2292 直接 DP 很难做,主要是有那种 “一个区间内部有很多个别的区间” 的情况. 自己想了一番枚举 max-min 的最大限制,然后在该基础上 ...

  2. 2018.10.27 loj#2292. 「THUSC 2016」成绩单(区间dp)

    传送门 g[i][j][k][l]g[i][j][k][l]g[i][j][k][l]表示将区间l,rl,rl,r变成最小值等于kkk,最大值等于lll时的花费的最优值. f[i][j]f[i][j] ...

  3. 【LOJ】#2292. 「THUSC 2016」成绩单

    题解 神仙dp啊><(也有可能是我菜) 我们发现,想要拿一段区间的话,只和这个区间的最大值和最小值有关系,那么我们考虑,如果一个区间[l,r]我们拿走了一些数后,使它的最小值是a,最大值是 ...

  4. LOJ 2991 「THUSC 2016」补退选——trie+线段树合并或vector

    题目:https://loj.ac/problem/2291 想了线段树合并的做法.就是用线段树维护 trie 的每个点在各种时间的操作. 然后线段树合并一番,线段树维护前缀最大值,就是维护最大子段和 ...

  5. 「THUSC 2016」成绩单 & 方块消除 (区间dp)

    成绩单 $f[l][r][mi][mx]$表示从l到r发到还没发的部分的最小值为mi最大值为mx时的最小代价. $f[l][r][0][0]$表示从l到r全部发完的代价. 自己写的无脑dp,枚举中转点 ...

  6. loj2292 「THUSC 2016」成绩单

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

  7. 【LOJ】#2291. 「THUSC 2016」补退选

    题解 在trie树上开vector记录一下这个前缀出现次数第一次达到某个值的下标,以及记录一下现在这个前缀有多少个 为什么thusc有那么水的题--是为了防我这种cai ji爆零么= = 代码 #in ...

  8. loj2291 「THUSC 2016」补退选

    ref pkusc 快到了,做点 thusc 的题涨涨 rp-- #include <iostream> #include <cstring> #include <cst ...

  9. LOJ#2799. 「CCC 2016」生命之环

    题意 给你一个 \(n\) 个 \(\rm 01\) 组成的环,每次操作之后每个位置为1当且仅当他的左右恰好有1个1.输出进行 \(T\) 次操作之后的环. \(n\leq 10^5, T\leq 1 ...

随机推荐

  1. Centos - php5.4升级到7.1 yum安装

    查看当前 PHP 版本 1 php -v 查看当前 PHP 相关的安装包,删除之 1 2 3 4 5 yum list installed | grep php   yum remove php   ...

  2. Java synchronized和Lock

    Synchronized 1. 将synchronized加在方法上, 即可实现对此方法的同步 public synchronized void deposit(float amt) { float ...

  3. 《你不知道的JavaScript(上)》笔记——作用域是什么

    Javascript是一门编译语言,它不是提前编译的, 编译结果也不能在分布式系统中进行移植. 在传统编译语言的流程中, 程序中的一段源代码在执行之前会经历三个步骤, 统称为"编译" ...

  4. 安装SQL server 提示重新启动计算机失败

    SQL Server2008是一款功能强大.实用性强的mysql数据库管理系统,因此很多用户都会在Win7系统中安装SQL Server2008,但是不少用户在安装过程中遇到问题,安装SQL Serv ...

  5. mongo 4.2版本注意事项

    参考文章: 4.0的安装 https://blog.csdn.net/qq_26896281/article/details/81203687 MongoDB4.0.0 远程连接及用户名密码认证登陆配 ...

  6. Java使用Java OCR API进行验证码识别

    Maven坐标: <!-- https://mvnrepository.com/artifact/com.asprise.ocr/java-ocr-api --> <dependen ...

  7. 推荐一个加载动图的网站loading.io

    推荐一个非常好玩的loading gif的资源网站:https://loading.io/ 里面有各种loading的动图.

  8. 【ABAP系列】ABAP CL_ABAP_CONV_IN_CE

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]ABAP CL_ABAP_CON ...

  9. Introduction - Welcome

    摘要: 本文是吴恩达 (Andrew Ng)老师<机器学习>课程,第一章<绪论:初识机器学习>中第1课时<欢迎参加机器学习课程>的视频原文字幕.为本人在视频学习过程 ...

  10. JavaScript 短路值

    了解表达式中的短路值. 逻辑运算从左到右.逻辑或运算,当左边的条件成立时,后面的条件将不再参与运算.因此在逻辑或运算中,尽量将条件结果为true的放第一位.而在逻辑与运算中,尽量将条件结果为false ...