Solution

很显然, 最优情况肯定是相邻两个相连 。

然后模型就跟 Luogu1484 类似了。

把两个房子 看成一个坑 (参考 Luogu1484), 选取 $k$ 个不相邻的坑, 使得权值最小。

Luogu1484 则是 选取 至多 $k$ 个不相邻坑,  使得权值最大。

先考虑简单问题:

当$k= 1$时, 肯定是选择 最大 的$a[i]$

当$k= 2$时, 仅有两种情况  选 最大的 $a[i]$ 和 不相邻的 $a[j]$ 或者 $a[i+1]+a[i-1]$

   我们先选了最大的$a[i]$

   那么怎么样才能让下一个找到的最大的 $a[j]$ 是满足条件的解呢?

  我们把 $a[i - 1]$ 和 $a[i + 1]$ 删去, 然后把 $a[i]$改为 $a[i + 1] + a[i - 1] - a[i]$,这样就满足了肯定不会 单独选到 $a[i + 1]或a[i-1]$。

  并且我们若想要选$a[i+1]和a[i-1]$且不选$a[i]$ 只需要再选一次$a[i]$即可。

在$k$更大的情况下同样适用。

然后就用链表存储 $nxt$ 与 $pre$, $Set$ 维护 最大值/ 最小值。

Code

 #include<cstdio>
#include<cstring>
#include<algorithm>
#include<set>
#define rd read()
#define ll long long
using namespace std;
typedef pair<ll, int> P; const int N = 1e5 + ;
const ll inf = 1e10; int n, k;
int nxt[N], pre[N];
ll a[N], ans;
set<P> st; int read() {
int X = , p = ; char c = getchar();
for (; c > '' || c < ''; c = getchar())
if (c == '-') p = -;
for (; c >= '' && c <= ''; c = getchar())
X = X * + c - '';
return X * p;
} void del(int x) {
nxt[pre[x]] = nxt[x];
pre[nxt[x]] = pre[x];
} int main()
{
n = rd; k = rd;
for (int i = ; i <= n; ++i)
a[i] = rd;
n--;
for (int i = ; i <= n; ++i)
a[i] = a[i + ] - a[i];
for (int i = ; i <= n; ++i)
nxt[i] = i + , pre[i] = i - ;
for (int i = ; i <= n; ++i)
st.insert(P(a[i], i));
a[] = a[n + ] = inf;
set<P> :: iterator it;
for (; k; --k) {
it = st.begin();
P tp = *it;
int x = tp.second; ll y = a[x];
ll t = a[pre[x]] + a[nxt[x]] - y;
a[x] = t; ans += y;
st.insert(P(t, x));
st.erase(P(y, x));
if (pre[x])
st.erase(P(a[pre[x]], pre[x])), del(pre[x]);
if (nxt[x] && nxt[x] != n + )
st.erase(P(a[nxt[x]], nxt[x])), del(nxt[x]);
}
printf("%lld\n", ans);
}

Luogu 3620 数据备份 - Set的更多相关文章

  1. 数据备份的OSS接口

    最近在做一个新的项目,从RDS备份到OSS,进行数据备份以及后续的还原.这边对阿里云的OSS数据上传接口进行说明,先做下笔记先简单介绍下OSS: ①Object 在OSS中,用户操作的基本数据单元是O ...

  2. 两种适用于中小量数据的mysql数据备份

    近来项目的业务量开始大了,感觉如果数据不周期性地备份一下,很可能会出现问题,虽然我每天都有阿里云的自动快照,上网找了一下方法,找到两种相对简单而又适合中小项目或者中小公司的数据备份策略,以下都是数据库 ...

  3. redis主从复制 从而 数据备份和读写分离

    蜗牛Redis系列文章目录http://www.cnblogs.com/tdws/tag/NoSql/ 爬虫转载注明地址本文地址—博客园蜗牛 http://www.cnblogs.com/tdws/p ...

  4. MySQL 数据备份与还原

    一.数据备份 1.使用mysqldump命令备份 mysqldump命令将数据库中的数据备份成一个文本文件.表的结构和表中的数据将存储在生成的文本文件中. mysqldump命令的工作原理很简单.它先 ...

  5. 转 MySQL 数据备份与还原

    MySQL 数据备份与还原 原贴:http://www.cnblogs.com/kissdodog/p/4174421.html   一.数据备份 1.使用mysqldump命令备份 mysqldum ...

  6. Linux文件系统应用---系统数据备份和迁移(用户角度)

    1   前言 首先承诺:对于从Windows系统迁移过来的用户,困扰大家的  “Linux系统下是否可以把系统文件和用户文件分开到C盘和D盘中” 的问题也可以得到完满解决. 之前的文章对Linux的文 ...

  7. 开源服务专题之-------rsync数据备份

    RSYNC是Remote Sync 远程同步的简称,与SCP的比较,SCP= 无法备份大量数据,类似windows的复制,而rsync=边复制 ,边统计,边比较,可以备份大量数据.可以镜像保存整个目录 ...

  8. Oracle数据备份bat

    @echo on setlocal rem 设置数据库和备份文件参数... set sid=testorcl set username=testname set password=testpwd se ...

  9. Bzoj1150 数据备份Backup

    Description 你在一家 IT 公司为大型写字楼或办公楼(offices)的计算机数据做备份.然而数据备份的工作是枯燥乏味 的,因此你想设计一个系统让不同的办公楼彼此之间互相备份,而你则坐在家 ...

随机推荐

  1. border&background1

    1.border-radius border-top-left-radius:10px; = border-top-left-radius:10px 10px; (水平10px 竖直10px 被正圆切 ...

  2. /WebRoot/WEB-INF/web.xml

    <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http:// ...

  3. Linux下Shell命令加减乘除计算

    使用 expr命令 (其中做乘的时候*号要用斜杠进行转义) 除以 [hadoop-user@hadoop1]$ echo `expr 9 / 3`             3加 [hadoop-use ...

  4. 终止执行js的方法

    (一)在function里面 (1)return;(2)return false; (二)非function方法里面 alert("before error.");throw Sy ...

  5. Python 多继承与MRO-C3算法

    继承关系图:树结构 广度优先遍历:先找A,再找B.C,最后找D.E.(顺序:A.B.C) 深度优先遍历:先找A,再找B,接着找D.E(把B里面找完):然后找C.(顺序:A.B.D.E.C) MRO-C ...

  6. python 取当前日期

    import time time.strftime('%Y-%m-%d',time.localtime(time.time()))

  7. JMeter学习(十二)分布式部署(转载)

    转载自 http://www.cnblogs.com/yangxia-test Jmeter 是java 应用,对于CPU和内存的消耗比较大,因此,当需要模拟数以千计的并发用户时,使用单台机器模拟所有 ...

  8. html自定义弹框

    一.要实现的功能 1.弹框弹出时有遮罩 2.弹框内的文字过多时右侧有滚动条 3.根据执行结果变更弹框title的样式   二.具体实现 思路:定义一个有宽高的div,默认隐藏,当要显示时,设置为dis ...

  9. vue打包后,接口请求404的完美解决方案

    在开发环境中,和后台对接为了解决跨域问题,使用了代理,也就是vue的proxyTable,但是打包放到生产环境中去时,接口请求不到,404,原因是开发环境的代理并不能用到生产环境,但是直接在请求接口是 ...

  10. vue-cli 配置 proxyTable pathRewrite

    vue-config-index.js中,proxyTable中的pathRewrite有什么用呢? 首先,在ProxyTable模块中设置了‘/api’,target中设置服务器地址,也就是接口的开 ...