ref

我是傻逼,我啥也不会,这是我抄的。

#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int n, a, b, w[55], tot, dy[1005], g[55][55], f[55][55][55][55], va[55];
bool isAll(int i, int j, int l, int r){
for(int k=i; k<=j; k++)
if(w[k]<l || w[k]>r)
return false;
return true;
}
bool isAny(int i, int j, int l, int r){
for(int k=i; k<=j; k++)
if(w[k]>=l && w[k]<=r)
return true;
return false;
}
int F(int, int, int, int);
int G(int, int);
int F(int i, int j, int l, int r){
int &re=f[i][j][l][r];
if(re!=-1) return re;
re = 0x3f3f3f3f;
if(isAll(i, j, l, r)){
re = 0;
return 0;
}
if(!isAny(i, j, l, r)){
re = G(i, j);
return re;
}
for(int k=i; k<j; k++){
re = min(re, F(i,k,l,r)+F(k+1,j,l,r));
re = min(re, G(i,k)+F(k+1,j,l,r));
}
return re;
}
int G(int l, int r){
int &re=g[l][r];
if(re!=-1) return re;
re = 0x3f3f3f3f;
for(int i=1; i<=tot; i++)
for(int j=i; j<=tot; j++)
if(isAny(l, r, i, j)){
int u=va[j], v=va[i];
re = min(re, F(l, r, i, j) + a + b * (v - u) * (v - u));
}
return re;
}
int main(){
cin>>n>>a>>b;
for(int i=1; i<=n; i++){
scanf("%d", &w[i]);
dy[w[i]] = 1;
}
for(int i=1; i<=1000; i++)
if(dy[i]){
va[++tot] = i;
dy[i] = tot;
}
for(int i=1; i<=n; i++)
w[i] = dy[w[i]];
memset(f, -1, sizeof(f));
memset(g, -1, sizeof(g));
cout<<G(1, n)<<endl;
return 0;
}

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

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

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

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

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

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

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

  4. 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] ...

  5. loj 2292「THUSC 2016」成绩单

    loj 看着就很区间dp,所以考虑求\(f_{i,j}\)表示区间\([i,j]\)的答案.注意到贡献答案的方式是每次选一个连续段,拿走后剩下的段拼起来继续段,所以转移就考虑从最后一次选的方法转移过来 ...

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

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

  7. loj2291 「THUSC 2016」补退选

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

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

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

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

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

随机推荐

  1. 从github克隆内容到本地时权限问题

    从github克隆内容到本地时权限问题

  2. c++树的表示方法

    c++树的节点的表示方法: typedef struct Node *Tree; struct Node { int data; Node *left; Node *right; int flag; ...

  3. 【HHHOJ】NOIP模拟赛 捌 解题报告

    点此进入比赛 得分: \(30+30+70=130\)(弱爆了) 排名: \(Rank\ 22\) \(Rating\):\(-31\) \(T1\):[HHHOJ260]「NOIP模拟赛 捌」Dig ...

  4. apache的安全增强配置(使用mod_chroot,mod_security)

    apache的安全增强配置(使用mod_chroot,mod_security) 作者:windydays      2010/8/17 LAMP环境的一般入侵,大致经过sql注入,上传webshel ...

  5. 输出流缓冲的意义 何时缓冲 Stdout Buffering

    From : https://eklitzke.org/stdout-buffering 译者:李秋豪 大多数编程语言默认提供了i/o缓冲特性,因为这会使得输出更加有效率.这些缓冲功能大都是默默工作& ...

  6. python_54_函数调用函数

    logger函数的定义要放在函数调用之前,在test1(1,2)前边,一下两种都可以 def test1(x,y): print(x,y) logger('Test1') def logger(sou ...

  7. Python pep8代码规范

    title: Python pep8代码规范 tags: Python --- 介绍(Introduction) 官方文档:PEP 8 -- Style Guide for Python Code 很 ...

  8. dubbo + zookeeper 配置

      Dubbo与Zookeeper.SpringMVC整合和使用 windows环境介绍: myeclipse 10 jdk1.6 tomcat 6.0.35 一.安装Zookeeper 1.通过链接 ...

  9. CUDA编程时,线程块的处理方法

  10. 网络编程——TCP协议和通信

    第1章 TCP通信 TCP通信同UDP通信一样,都能实现两台计算机之间的通信,通信的两端都需要创建socket对象. 区别在于,UDP中只有发送端和接收端,不区分客户端与服务器端,计算机之间可以任意地 ...