LOJ 2292 「THUSC 2016」成绩单——区间DP
题目:https://loj.ac/problem/2292
直接 DP 很难做,主要是有那种 “一个区间内部有很多个别的区间” 的情况。
自己想了一番枚举 max-min 的最大限制,然后在该基础上最小化区间个数之类的。还是不会。
看了题解才会。
考虑再设一个 dp 数组来辅助表示那种麻烦的情况。
值可以离散化!又因为代价与值有关,可以考虑把值放进角标里。
令 f[ i ][ j ] 表示把 [ i , j ] 全取完的最小代价,g[ i ][ j ][ l ][ r ] 表示把 [ i , j ] 取得只剩下值在 [ l , r ] 之间的最小代价。
g[ i ][ j ][ l ][ r ] 转移时讨论一下 j 是否留下。若留下,则从 g[ i ][ j-1 ][ l ][ r ] 转移,否则枚举和 j 一起删掉的区间,从 g[ i ][ k-1 ][ l ][ r ] + f[ k ][ j ] 转移。
然后 f[ i ][ j ] 就是各种 g[ i ][ j ][ l ][ r ] 再加上把值在 [ l , r ] 的数一次取完的代价。
这种设状态为 “做到剩下特定元素” 的思想很好。
- #include<cstdio>
- #include<cstring>
- #include<algorithm>
- using namespace std;
- int Mx(int a,int b){return a>b?a:b;}
- int Mn(int a,int b){return a<b?a:b;}
- const int N=,INF=;
- int n,m,A,B,a[N],tp[N],f[N][N],g[N][N][N][N];
- int Sqr(int x){return x*x;}
- void cz(int &u,int v){if(v<u)u=v;}
- int main()
- {
- scanf("%d%d%d",&n,&A,&B);
- for(int i=;i<=n;i++)scanf("%d",&a[i]),tp[i]=a[i];
- sort(tp+,tp+n+); m=unique(tp+,tp+n+)-tp-;
- for(int i=;i<=n;i++)a[i]=lower_bound(tp+,tp+m+,a[i])-tp;
- memset(g,0x3f,sizeof g);
- for(int i=;i<=n;i++)
- {
- f[i][i]=A;
- for(int l=;l<=m;l++)
- for(int r=l;r<=m;r++)
- {
- if(a[i]>=l&&a[i]<=r)g[i][i][l][r]=;
- else g[i][i][l][r]=A;
- }
- }
- for(int d=;d<n;d++)
- for(int i=;i+d<=n;i++)
- {
- int j=i+d; int mx=,mn=INF;
- for(int k=i;k<=j;k++)
- mx=Mx(mx,a[k]),mn=Mn(mn,a[k]);
- f[i][j]=A+B*Sqr(tp[mx]-tp[mn]);
- for(int l=;l<=m;l++)
- for(int r=l;r<=m;r++)
- {
- if(a[j]>=l&&a[j]<=r)
- cz(g[i][j][l][r],g[i][j-][l][r]);
- for(int k=i+;k<=j;k++)
- cz(g[i][j][l][r],g[i][k-][l][r]+f[k][j]);
- cz(f[i][j],g[i][j][l][r]+A+B*Sqr(tp[r]-tp[l]));
- }
- }
- printf("%d\n",f[][n]);
- return ;
- }
LOJ 2292 「THUSC 2016」成绩单——区间DP的更多相关文章
- loj 2292「THUSC 2016」成绩单
loj 看着就很区间dp,所以考虑求\(f_{i,j}\)表示区间\([i,j]\)的答案.注意到贡献答案的方式是每次选一个连续段,拿走后剩下的段拼起来继续段,所以转移就考虑从最后一次选的方法转移过来 ...
- 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] ...
- 【LOJ】#2292. 「THUSC 2016」成绩单
题解 神仙dp啊><(也有可能是我菜) 我们发现,想要拿一段区间的话,只和这个区间的最大值和最小值有关系,那么我们考虑,如果一个区间[l,r]我们拿走了一些数后,使它的最小值是a,最大值是 ...
- 「THUSC 2016」成绩单 & 方块消除 (区间dp)
成绩单 $f[l][r][mi][mx]$表示从l到r发到还没发的部分的最小值为mi最大值为mx时的最小代价. $f[l][r][0][0]$表示从l到r全部发完的代价. 自己写的无脑dp,枚举中转点 ...
- LOJ 2991 「THUSC 2016」补退选——trie+线段树合并或vector
题目:https://loj.ac/problem/2291 想了线段树合并的做法.就是用线段树维护 trie 的每个点在各种时间的操作. 然后线段树合并一番,线段树维护前缀最大值,就是维护最大子段和 ...
- loj2292 「THUSC 2016」成绩单
ref 我是傻逼,我啥也不会,这是我抄的. #include <iostream> #include <cstring> #include <cstdio> usi ...
- 【LOJ】#2291. 「THUSC 2016」补退选
题解 在trie树上开vector记录一下这个前缀出现次数第一次达到某个值的下标,以及记录一下现在这个前缀有多少个 为什么thusc有那么水的题--是为了防我这种cai ji爆零么= = 代码 #in ...
- loj2291 「THUSC 2016」补退选
ref pkusc 快到了,做点 thusc 的题涨涨 rp-- #include <iostream> #include <cstring> #include <cst ...
- LOJ#2799. 「CCC 2016」生命之环
题意 给你一个 \(n\) 个 \(\rm 01\) 组成的环,每次操作之后每个位置为1当且仅当他的左右恰好有1个1.输出进行 \(T\) 次操作之后的环. \(n\leq 10^5, T\leq 1 ...
随机推荐
- 由装饰者模式来深入理解Java I/O整体框架
前言 Java里面的I/O这一部分看过很多遍,每次看完之后特别混乱,又是输入流,又是输出流,又是字符流,又是字节流,还有什么过滤流,缓冲流.每次看得我如入云里雾里,直到后面看了设计模式这一块,才算真正 ...
- [数据结构] 大纲 - Stan Zhang 数据结构速通教程
* 注: 本文/本系列谢绝转载,如有转载,本人有权利追究相应责任. 2019年4月8日 P1.1 链表 Link:https://www.cnblogs.com/yosql473/p/10727471 ...
- 使用rvm关联ruby版本和rails版本。
https://my.oschina.net/yudongyang/blog/1549248 https://rvm.io/gemsets 安装rails的一个版本 1.创建一个专门的文件夹存放对应的 ...
- MyEclipse项目的BUG修复错误类型
一.The type java.lang.CharSequence cannot be resolved. It is indirectly referenced from required .cla ...
- 【转】前端的BFC、IFC、GFC和FFC
什么是BFC.IFC.GFC和FFC CSS2.1中只有BFC和IFC, CSS3中才有GFC和FFC. FC的全称是:Formatting Contexts,是W3C CSS2.1规范中的一个概念. ...
- 词向量编码 word2vec
word2vec word2vec 是Mikolov 在Bengio Neural Network Language Model(NNLM)的基础上构建的一种高效的词向量训练方法. 词向量 词向量(w ...
- ES6学习笔记(二)—— 通过ES6 Module看import和require区别
前言 说到import和require,大家平时开发中一定不少见,尤其是需要前端工程化的项目现在都已经离不开node了,在node环境下这两者都是大量存在的,大体上来说他们都是为了实现JS代码的模块化 ...
- Go程序设计
01 Go基础特性&独有特性
- day38-多进程多线程-进程池
强大的Manage上一篇的数据共享的方式只有两种结构Value和Array.Python中提供了强大的Manage专门用来做数据共享的,其支持的类型非常多,包括,Value, Array,list,d ...
- day37-多进程多线程二-锁
Lock组件 当我们用多进程来读写文件的时候,如果一个进程是写文件,一个进程是读文件,如果两个文件同时进行,肯定是不行的,必须是文件写结束以后,才可以进行读操作.或者是多个进程在共享一些资源的时候,同 ...