【poj3016】 K-Monotonic
http://poj.org/problem?id=3016 (题目链接)
题意
给出一个数列,将一个数${a_i}$更改为${b_i}$的代价为${|a_i-b_i|}$。求将数列改为不递减的最小代价
Solution
话说我现在还没弄得明白→_→感觉论文的证明写的好搓。。
左转题解:http://www.cnblogs.com/wenruo/p/5798801.html
代码
// poj3016
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<vector>
#include<cstdio>
#include<cmath>
#define LL long long
#define inf 1<<30
#define Pi acos(-1.0)
#define free(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);
using namespace std; const int maxn=2010;
struct heap {int l,r,val,sz;}q[maxn];
int num[maxn],rt[maxn],a[maxn],b[maxn],c[maxn];
int cnt,n,K,in[maxn][maxn],de[maxn][maxn],f[maxn][maxn]; int newq(int val) {
q[++cnt].val=val;
q[cnt].l=q[cnt].r=0;q[cnt].sz=1;
return cnt;
}
int merge(int x,int y) {
if (x==0 || y==0) return x+y;
if (q[x].val<q[y].val) swap(x,y);
q[x].r=merge(q[x].r,y);
swap(q[x].l,q[x].r);
q[x].sz=q[q[x].l].sz+q[q[x].r].sz+1;
return x;
}
int del(int x) {
int l=q[x].l,r=q[x].r;
return merge(l,r);
}
void cal(int *a,int u,int v,int *ans) {
int res=0,tot=0;cnt=0;
for (int i=u;i<=v;i++) {
rt[++tot]=newq(a[i]);
num[tot]=1;
while (tot>1 && q[rt[tot]].val<q[rt[tot-1]].val) {
tot--;
if (num[tot+1]&1) res+=q[rt[tot]].val-q[rt[tot+1]].val;
rt[tot]=merge(rt[tot],rt[tot+1]);
num[tot]+=num[tot+1];
while (q[rt[tot]].sz*2>num[tot]+1) rt[tot]=del(rt[tot]);
}
ans[i]=res;
}
}
int main() {
while (scanf("%d%d",&n,&K)!=EOF && n && K) {
for (int i=1;i<=n;i++) {
scanf("%d",&a[i]);
c[i]=-a[i]-i;
b[i]=a[i]-i;
}
for (int i=1;i<=n;i++) {
cal(c,i,n,de[i]);
cal(b,i,n,in[i]);
}
for (int i=1;i<=n;i++) f[0][i]=inf;
for (int i=1;i<=K;i++) {
f[i][0]=0;
for (int j=1;j<=n;j++) {
f[i][j]=inf;
for (int k=0;k<j;k++)
f[i][j]=min(f[i][j],f[i-1][k]+min(in[k+1][j],de[k+1][j]));
}
}
printf("%d\n",f[K][n]);
}
return 0;
}
【poj3016】 K-Monotonic的更多相关文章
- 【BZOJ3110】K大数查询(整体二分)
[BZOJ3110]K大数查询(整体二分) 题面 BZOJ 题解 看了很久整体二分 一直不知道哪里写错了 ... 又把树状数组当成线段树区间加法来用了.. 整体二分还是要想清楚在干什么: 我们考虑第\ ...
- 【CF1133E】K Balanced Teams(动态规划,单调队列)
[CF1133E]K Balanced Teams(动态规划,单调队列) 题面 CF 让你把一堆数选一些出来分成不超过\(K\)组,每一组里面的最大值和最小值之差不超过\(5\),求最多有多少个人元素 ...
- 【BZOJ4520】K远点对(KD-Tree)
[BZOJ4520]K远点对(KD-Tree) 题面 BZOJ 洛谷 题解 考虑暴力. 维护一个大小为\(K\)的小根堆,然后每次把两个点之间的距离插进去,然后弹出堆顶 这样子可以用\(KD-Tree ...
- 【BZOJ4504】K个串 可持久化线段树+堆
[BZOJ4504]K个串 Description 兔子们在玩k个串的游戏.首先,它们拿出了一个长度为n的数字序列,选出其中的一个连续子串,然后统计其子串中所有数字之和(注意这里重复出现的数字只被统计 ...
- 机器学习【一】K最近邻算法
K最近邻算法 KNN 基本原理 离哪个类近,就属于该类 [例如:与下方新元素距离最近的三个点中,2个深色,所以新元素分类为深色] K的含义就是最近邻的个数.在sklearn中,KNN的K值是通过n ...
- 【ZJOI2013】k大数查询 BZOJ 3110
Description 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c 如果是2 a b c形式,表示询问从第a个位置到第b个位 ...
- 【BZOJ-3110】K大数查询 整体二分 + 线段树
3110: [Zjoi2013]K大数查询 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 6265 Solved: 2060[Submit][Sta ...
- BZOJ 3110 【Zjoi2013】 K大数查询
Description 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c如果是2 a b c形式,表示询问从第a个位置到第b个位置 ...
- 【BZOJ-4520】K远点对 KD-Tree + 堆
4520: [Cqoi2016]K远点对 Time Limit: 30 Sec Memory Limit: 512 MBSubmit: 490 Solved: 237[Submit][Status ...
随机推荐
- thymeleaf 使用javascript定义数组报错
js中免不了的要用的数组,一维的二维的三维的 但是当用到thymeleaf作为模版时候会有一些坑,导致数组不能用 org.thymeleaf.exceptions.TemplateProcessing ...
- CocoStuff—基于Deeplab训练数据的标定工具【一、翻译】(未完)
一.CocoStuff简介 CocoStuff是一款为deeplab设计的,运行在Matlab中的语义标定工具,其标定结果和结合Deeplab训练出的结果均为mat文件格式,该项目源码已在github ...
- 从零开始的Python学习Episode 20——面向对象(3)
面向对象之封装 封装,即隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别:将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体. 隐藏 在python中用双下划线开 ...
- 欧拉筛——$O(n)$复杂度的质数筛法
欧拉筛法可以以\(O(n)\)的时间,空间复杂度求出\(1-n\)范围内的所有质数. 其核心思想是每个合数仅会被其最小的质因数筛去一次. See this website for more detai ...
- Homebrew1.5之后安装PHP和扩展
Homebrew 1.5 宣布放弃 homebrew/php, 转而使用homebrew/core维护, 详见https://brew.sh/2018/01/19/homebrew-1.5.0/ 于是 ...
- ffmpeg——压缩mav格式音频
今天偶然帮朋友压缩一个mav格式的音频.开始用压缩码率的方式,mav格式的音频体积一点都没变,查资料需要压缩音频文件的采样率和声道才能压缩mav格式的音频. 压缩要求是:将一个mav格式的音频文件,由 ...
- Beta发布—视频展示
视频链接:http://v.youku.com/v_show/id_XMzE3ODQ0NjIzMg==.html视频简要内容介绍:1.一个小小的logo展示.2.在alpha的基础上,beta发布中增 ...
- mybatis之模糊查询SQL
一,MySQL数据库 name like concat('%' , #{name} , '%') 二,Oracle数据库 name like '%' || #{name} || '%'
- 20135332 第一次JAVA实验报告
课程:Java程序设计 班级: 1353 姓名:武西垚 学号:20135332 成绩: 指导教师:娄嘉鹏 实验日期:2 ...
- 作业45//Calculator::3.0
计算器 github 我的天我到底要写什么 一,2.0及2.6的改动 做了计算部分 加入了判断输入是否合法 合法的定义是算式符合`数字+运算符+数字+运算符+数字`的格式 其中`"-&quo ...