[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官方 ...
随机推荐
- python实现:判断某一天是那一年中的第几天
方法1:先判断是否是闰年,然后再利用求和,得出某一天是第几天 # 方法1:low版 def func1(year, month, day): # 分别创建平年,闰年的月份天数列表(注意列表下标从0开始 ...
- 第09组 团队Git现场编程实战
组长博客链接 1.团队分工 团队成员 分工明细 王耀鑫 博客撰写,数据处理 陈志荣 前端界面,前端功能实现 陈超颖 前端界面,前端功能实现 沈梓耀 前端界面,前端功能实现 林明镇 数据处理 滕佳 前端 ...
- mysql count() 函数,对结果统计计数
mysql> ; +----------+------------+-----+---------------------+ | name_new | transactor | pid | or ...
- 让你的shell更体贴
使用shell的时候很多,特别是拉幕式终端,使用时更加方便,同时可以利用 echo "Did you know that:" ;whatis $(ls /bin | shuf -n ...
- Fluent也弹窗
具体步骤见<fluent加载第三方(C++,Fortran等)动态链接库> 我们对导入的动态链接库进行改动 打开VS2013 源代码: #include #ifdef __cplusplu ...
- ICEM-一种网格画法的思考
原视频下载链接:https://pan.baidu.com/s/1kV4Zj3x 密码: uthc
- 2019 SDN第6次上机作业
1.作业要求: 作业链接 参考资料: Ryu控制器的API文档:ryu.app.ofctl_rest Ryu的拓扑展示 助教博客:基于RYU restful api实现的VLAN网络虚拟化 2.具体操 ...
- Python高级笔记(十)闭包
1. 闭包 #!/usr/bin/python # -*- encoding=utf- -*- def test(number): # 在函数里面再定义一个函数,并且这个函数用到外边函数的变量,那么将 ...
- python中的一些算法
两个基础知识点:递归和时间复杂度 递归 递归函数的特点:自己调用自己,有结束条件,看下面例子: def fun1(x): """无结束条件,报错""& ...
- Python - Django - form 组件基本用法
普通 form 表单的处理: reg.html: <!DOCTYPE html> <html lang="en"> <head> <met ...