Description

Original Problem

Chinese Translation

大概就是给你一个间隔为1的多米诺序列,推倒一个多米诺骨牌有个花费,求推倒所有多米诺骨牌的最小花费

Solution

这道题先处理出每一个点最左及最右可推倒的位置,这可以用栈维护

设以上位置为\(l_{i}\),\(r_{i}\)

接下来设\(f_{i}\)为第1~i个点全部倒下,且第i个点往左倒的最小花费

\(g_{i}\)为第1~i个点全部倒下,且第i个点往右倒的最小花费

先考虑\(f_{i}\)

显然,\(f_{i}=min(f_{l_{i}-1},g_{l_{i}-1})+cost_{i}\)

即第\(l_{i}-1\)之前的点都倒下再加上\(l_{i}\)到i倒下的花费

再考虑\(g_{i}\)

对于\(g_{i}\),初始肯定是手动放倒该点即$$g_{i}=min(g_{i-1},f_{i-1})+cost_{i}$$

用一个栈维护最小的能推倒i的\(g_{j}\)来更新\(g_{i}\)

因为j能影响i,那么i能影响的j都能影响,所以只有\(g_{i}<g_{j}\)时才需要将该点压入栈中

Code

#include <cstdio>
#include <algorithm>
#define M 10000001
#define N 250010
#define open(x) freopen(x".in","r",stdin);freopen(x".out","w",stdout);
using namespace std;
int n,m,i,q,id,mul,t,j,cnt,zhan[M],left[M],right[M],k[N],a[N],b[N],h[M],pl[N];
long long f[M],g[M],c[M];
int main()
{
open("shark");
scanf("%d%d",&n,&m);
for (i=1;i<=n;i++)
{
scanf("%d",&k[i]);
pl[i]=cnt+1;
for (j=1;j<=k[i];j++)
scanf("%d",&a[++cnt]);
cnt=pl[i]-1;
for (j=1;j<=k[i];j++)
scanf("%d",&b[++cnt]);
}
pl[n+1]=cnt+1;
scanf("%d",&q);
for (i=1;i<=q;i++)
{
scanf("%d %d",&id,&mul);
for (j=pl[id];j<=pl[id+1]-1;j++)
{
h[++t]=a[j];
c[t]=(long long)b[j]*mul;
}
}zhan[1]=zhan[0]=1;
for (i=1;i<=m;i++)
{
left[i]=max(1,i-h[i]+1);
t=left[i];
while (left[i]<=zhan[zhan[0]])
{
if (!zhan[0]) break;
t=min(t,left[zhan[zhan[0]]]);
zhan[0]--;
}
left[i]=t;
zhan[++zhan[0]]=i;
}
zhan[1]=m;zhan[0]=1;
for (i=m;i>=1;i--)
{
right[i]=min(m,i+h[i]-1);
t=right[i];
while (right[i]>=zhan[zhan[0]])
{
if (!zhan[0]) break;
t=max(t,right[zhan[zhan[0]]]);
zhan[0]--;
}
right[i]=t;
zhan[++zhan[0]]=i;
}
f[1]=g[1]=c[1];
zhan[0]=zhan[1]=1;
for (i=2;i<=m;i++)
{
f[i]=min(f[left[i]-1],g[left[i]-1])+c[i];
while (right[zhan[zhan[0]]]<i && zhan[0]) zhan[0]--;
g[i]=min(g[i-1],f[i-1])+c[i];
if (!zhan[0]) zhan[++zhan[0]]=i;else
{
g[i]=min(g[i],g[zhan[zhan[0]]]);
if (g[i]<g[zhan[zhan[0]]]) zhan[++zhan[0]]=i;
}
}
printf("%lld",min(g[m],f[m]));
return 0;
}

Codeforces1131G Most Dangerous Shark的更多相关文章

  1. CodeForces 1131G. Most Dangerous Shark

    题目简述:从左到右依次有$n \leq 10^7$个Domino骨牌,高度为$h_i$,手动推倒他的花费为$c_i$.每个骨牌之间的距离为$1$.一个骨牌可以被向左或者向右推倒.当第$i$个骨牌被推倒 ...

  2. Codeforces Round #541 (Div. 2) (A~F)

    目录 Codeforces 1131 A.Sea Battle B.Draw! C.Birthday D.Gourmet choice(拓扑排序) E.String Multiplication(思路 ...

  3. Codeforces-541div2

    https://www.cnblogs.com/31415926535x/p/10427505.html codeforces-1131A~G 这场很多题都很简单,,应该是要能至少做出4道的,,但是我 ...

  4. Codeforces Round #541

    因为这次难得不在十点半(或是更晚),大家都在打,然后我又双叒叕垫底了=.= 自己对时间的分配,做题的方法和心态还是太蒻了,写的时候经常写一半推倒重来.还有也许不是自己写不出来,而是在开始写之前就觉得自 ...

  5. Codeforces 1131 (div 2)

    链接:http://codeforces.com/contest/1131 A Sea Battle 利用良心出题人给出的图,不难看出答案为\(2*(h1+h2)+2*max(w1,w2)+4\)由于 ...

  6. 与"shark"相关的表达

    The word shark can be used to describe someone who is tricky and uses other people. Shark这个单词可以用来形容一 ...

  7. System.Web.HttpRequestValidationException: A potentially dangerous Request.F

    ASP.NET .0验证请求 System.Web.HttpRequestValidationException: A potentially dangerous Request.F System.W ...

  8. 机器学习库shark安装

    经过两天的折腾,一个对c++和机器学习库的安装都一知半解的人终于在反复安装中,成功的将shark库安装好了,小小纪念一下,多亏了卡门的热心帮忙. shark的安装主要分为以下几个部分: (1)下载 s ...

  9. ASP.NET 4.0 potentially dangerous Request.Form value was detected

    A few days ago, while working on an ASP.NET 4.0 Web project, I got an issue. The issue was, when use ...

随机推荐

  1. 基于ABP做一个简单的系统——实战篇:4.基于富文本编辑器,Razor模板引擎生成内容并导出Word 填坑记录

    起因 需求是这样的,有一种协议需要生成,协议的模板是可配置的,在生成过程中,模板中的内容可以根据约定的标记进行替换(就像mvc的razor模板一样).生成后的内容还需要导出成word或pdf. 常见的 ...

  2. 关闭jetbrains ide support 正在调试此浏览器提示

    1 安装JetBrains IDE Support插件 插件地址 2 启用插件 3 设置访问端口 4 WebStorm中设置Live Edit 5 关闭"JetBrains IDE Supp ...

  3. idea Tomcat部署war和war exploded的区别

    原文地址:https://blog.csdn.net/linjpg/article/details/73322881 在使用IDEA开发项目时,部署Tomcat的时候通常会出现以下情况: 是选择war ...

  4. py_二分查找

    ''' 查找:在一些数据元素中,通过一定的方法找出与关键字相同元素的过程, 列表查找:从列表中查找指定元素 输入:列表.待查找元素 输出:元素下标(未找到元素时一般返回None或-1) 内置列表查找函 ...

  5. unity 对Animator动画系统的研究

    unity的新动画系统叫Mecanim,使用Animator来取代旧系统Animation,按Unity文档的惯例:知识点主要分2部分:unity manual和unity script,读者可以边看 ...

  6. [BUUOJ记录] [GXYCTF2019]Ping Ping Ping

    主要考察RCE的防护绕过,感觉考的还是比较全的 先构造Payload: ?ip=127.0.0.1;ls 看到目录下有两个文件,fuzz一下发现过滤了 空格 / + * ? { } ( ) [ ]等符 ...

  7. Myabtis动态SQL,你真的会了吗?

    目录 前言 什么是动态SQL? 常用的标签 if choose.when.otherwise where foreach set sql include 总结 拓展一下 Mybatis中如何避免魔数? ...

  8. 时间选择器 element

    <el-date-picker type="datetime" placeholder="选择上线日期" :picker-options="st ...

  9. 01vue.config.js

      const path = require('path'); module.exports = { // 基本路径 publicPath: process.env.NODE_ENV === 'pro ...

  10. 跟着尚硅谷系统学习Docker-【day05】

    day05-20200717   p21.docker容器数据卷容器   就是活动硬盘上面挂载硬盘进行数据的传递.     [docker run -it --name dc01 fyr/centos ...