原题

【错解】

一眼DP

哎好像能删成奇形怪状的

弃疗,主要是没时间了

【正解】

神仙DP

明显先设\(f(i,j)\)表示把\([i,j]\) 取完的最小代价

然后发现转移不了,因为可以拿很多块

但是我们发现最后一次操作是可以确定的

那我们再设\(g(i,j,x,y)\)表示\([i,j]\)取走一部分,使得剩下的最小值为x,最大值为y的最小代价

为了方便,我们假装j没有取

这样就可以花费\(a+b \times (y-x)^2\)把这部分取完

\(g(i,k,x,y)\)可以枚举前面的\((i,j)\),\([j+1,k-1]\)暴力\(f\)转移

对于\(f(i,j)\),我们枚举最后一次取的右端点k,前面用\(g(i,k,x,y)+a+b \times (y-x)^2\),后面用\(f(k+1,j)\)

懒得写方程了,具体看代码

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define MAXN 55
#define INF 0x3f3f3f3f
using namespace std;
inline void update(int &x,int y)
{
x=(x<y? x:y);
}
int f[MAXN][MAXN],g[MAXN][MAXN][MAXN][MAXN];
int w[MAXN],t[MAXN];
int n,a,b;
int main()
{
scanf("%d%d%d",&n,&a,&b);
for (int i=1;i<=n;i++)
scanf("%d",&w[i]);
for (int i=1;i<=n;i++)
t[i]=w[i];
sort(t+1,t+n+1);
int m=unique(t+1,t+n+1)-t-1;
for (int i=1;i<=n;i++)
w[i]=lower_bound(t+1,t+m+1,w[i])-t;
memset(f,0x3f,sizeof(f));
memset(g,0x3f,sizeof(g));
for (int i=1;i<=n;i++)
g[i][i][w[i]][w[i]]=f[i+1][i]=0;
f[1][0]=0;
for (int i=n;i>=1;i--)
for (int j=i;j<=n;j++)
for (int x=1;x<=m;x++)
for (int y=x;y<=m;y++)
{
if (g[i][j][x][y]==INF) continue;
for (int k=j+1;k<=n;k++)
update(g[i][k][min(x,w[k])][max(y,w[k])],g[i][j][x][y]+f[j+1][k-1]);
for (int k=j;k<=n;k++)
update(f[i][k],g[i][j][x][y]+f[j+1][k]+a+b*(t[y]-t[x])*(t[y]-t[x]));
}
printf("%d\n",f[1][n]);
return 0;
}

【20181027T3】山河令【DP套DP】的更多相关文章

  1. 【BZOJ3864】Hero meet devil DP套DP

    [BZOJ3864]Hero meet devil Description There is an old country and the king fell in love with a devil ...

  2. bzoj 3864: Hero meet devil [dp套dp]

    3864: Hero meet devil 题意: 给你一个只由AGCT组成的字符串S (|S| ≤ 15),对于每个0 ≤ .. ≤ |S|,问 有多少个只由AGCT组成的长度为m(1 ≤ m ≤ ...

  3. [模板] dp套dp && bzoj5336: [TJOI2018]party

    Description Problem 5336. -- [TJOI2018]party Solution 神奇的dp套dp... 考虑lcs的转移方程: \[ lcs[i][j]=\begin{ca ...

  4. luogu 4158 粉刷匠 dp套dp

    dp套dp 每个木板是个递推的dp,外部是个分组背包 #include<bits/stdc++.h> #define rep(i,x,y) for(register int i=x;i&l ...

  5. DP套DP

    DP套DP,就是将内层DP的结果作为外层DP的状态进行DP的方法. [BZOJ3864]Hero meet devil 对做LCS的DP数组差分后状压,预处理出转移数组,然后直接转移即可. tr[S] ...

  6. Codeforces 372B Counting Rectangles is Fun:dp套dp

    题目链接:http://codeforces.com/problemset/problem/372/B 题意: 给你一个n*m的01矩阵(1 <= n,m <= 40). 然后有t组询问( ...

  7. codeforces 979E(dp套dp)

    题意: 有n个点,编号为1~n.有的点颜色是黑色,有的点颜色是白色,有的点的颜色待涂.你还可以连一些边,但这些边一定是从小编号连到大编号的点. 对于一个确定的图,我们去统计有多少条路径满足“该路径经过 ...

  8. dp 套 dp扯谈

    1.[扯谈概念] \(dp\) 套 \(dp\) 其实也就是 \(dp\) . 这里就定义下面两个概念: 内层 \(dp\) 表示的是被套在里面的那个 \(dp\) 外层 \(dp\) 表示的是最外面 ...

  9. P4590-[TJOI2018]游园会【dp套dp】

    正题 题目链接:https://www.luogu.com.cn/problem/P4590 题目大意 给出一个长度为\(m\)的字符串\(s\). 对于每个\(k\in[0,m]\)求有多少个长度为 ...

  10. 洛谷 P5279 - [ZJOI2019]麻将(dp 套 dp)

    洛谷题面传送门 一道 dp 套 dp 的 immortal tea 首先考虑如何判断一套牌是否已经胡牌了,考虑 \(dp\)​​​​​.我们考虑将所有牌按权值大小从大到小排成一列,那我们设 \(dp_ ...

随机推荐

  1. python学习笔记(十四)之字典

    字典:是python中唯一的映射类型,字典中每一项都是由键-值对组成的项.字典中没有索引,只有键和值.键的类型可以是整型,变量或字符串. 创建和访问字典: >>> dict1 = { ...

  2. flex图片布局

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>f ...

  3. java正则: 忽略大小写匹配

    import java.util.regex.Matcher; import java.util.regex.Pattern; import com.sun.org.apache.xerces.int ...

  4. 64_s1

    SAASound-3.2-17.fc26.i686.rpm 13-Feb-2017 22:13 27650 SAASound-3.2-17.fc26.x86_64.rpm 13-Feb-2017 23 ...

  5. [ python ] 匿名函数和高阶函数

    匿名函数 描述:    关键字 lambda 定义的函数    语法: 函数名 = lambda 参数:返回值 返回值:    函数返回结果值 实例: 一个参数的匿名函数: func = lambda ...

  6. 使用非root用户启动tomcat

    以下操作均为以root用户运行1.添加tomcat用户组 /usr/sbin/groupadd tomcat 2.添加tomcat用户,并限制登录 /usr/sbin/useradd -s /bin/ ...

  7. csu 1767(循环节)

    1767: 想打架吗?算我一个!所有人,都过来!(2) Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 99  Solved: 18[Submit][St ...

  8. Native Apps、Web Apps

    Native Apps 指的是远程程序,一般依托于操作系统,有很强的交互,是一个完整的App,可拓展性强,需要用户下载安装使用 优点: 打造完美的用户体验 性能稳定 操作速度快,上手流畅 访问本地资源 ...

  9. centos修改oracle字符集

    1.首先以sysdba的身份登录上去 conn /as sysdba2.关闭数据库shutdown immediate;3.以mount打来数据库,startup mount4.设置session S ...

  10. c#中值类型和引用类型的区别

    1.    值类型的数据存储在内存的栈中:引用类型的数据存储在内存的堆中,而内存单元中只存放堆中对象的地址. 2.     值类型存取速度快,引用类型存取速度慢. 3.     值类型表示实际数据,引 ...