Codeforces1131G Most Dangerous Shark
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的更多相关文章
- CodeForces 1131G. Most Dangerous Shark
题目简述:从左到右依次有$n \leq 10^7$个Domino骨牌,高度为$h_i$,手动推倒他的花费为$c_i$.每个骨牌之间的距离为$1$.一个骨牌可以被向左或者向右推倒.当第$i$个骨牌被推倒 ...
- Codeforces Round #541 (Div. 2) (A~F)
目录 Codeforces 1131 A.Sea Battle B.Draw! C.Birthday D.Gourmet choice(拓扑排序) E.String Multiplication(思路 ...
- Codeforces-541div2
https://www.cnblogs.com/31415926535x/p/10427505.html codeforces-1131A~G 这场很多题都很简单,,应该是要能至少做出4道的,,但是我 ...
- Codeforces Round #541
因为这次难得不在十点半(或是更晚),大家都在打,然后我又双叒叕垫底了=.= 自己对时间的分配,做题的方法和心态还是太蒻了,写的时候经常写一半推倒重来.还有也许不是自己写不出来,而是在开始写之前就觉得自 ...
- Codeforces 1131 (div 2)
链接:http://codeforces.com/contest/1131 A Sea Battle 利用良心出题人给出的图,不难看出答案为\(2*(h1+h2)+2*max(w1,w2)+4\)由于 ...
- 与"shark"相关的表达
The word shark can be used to describe someone who is tricky and uses other people. Shark这个单词可以用来形容一 ...
- System.Web.HttpRequestValidationException: A potentially dangerous Request.F
ASP.NET .0验证请求 System.Web.HttpRequestValidationException: A potentially dangerous Request.F System.W ...
- 机器学习库shark安装
经过两天的折腾,一个对c++和机器学习库的安装都一知半解的人终于在反复安装中,成功的将shark库安装好了,小小纪念一下,多亏了卡门的热心帮忙. shark的安装主要分为以下几个部分: (1)下载 s ...
- 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 ...
随机推荐
- 基于ABP做一个简单的系统——实战篇:4.基于富文本编辑器,Razor模板引擎生成内容并导出Word 填坑记录
起因 需求是这样的,有一种协议需要生成,协议的模板是可配置的,在生成过程中,模板中的内容可以根据约定的标记进行替换(就像mvc的razor模板一样).生成后的内容还需要导出成word或pdf. 常见的 ...
- 关闭jetbrains ide support 正在调试此浏览器提示
1 安装JetBrains IDE Support插件 插件地址 2 启用插件 3 设置访问端口 4 WebStorm中设置Live Edit 5 关闭"JetBrains IDE Supp ...
- idea Tomcat部署war和war exploded的区别
原文地址:https://blog.csdn.net/linjpg/article/details/73322881 在使用IDEA开发项目时,部署Tomcat的时候通常会出现以下情况: 是选择war ...
- py_二分查找
''' 查找:在一些数据元素中,通过一定的方法找出与关键字相同元素的过程, 列表查找:从列表中查找指定元素 输入:列表.待查找元素 输出:元素下标(未找到元素时一般返回None或-1) 内置列表查找函 ...
- unity 对Animator动画系统的研究
unity的新动画系统叫Mecanim,使用Animator来取代旧系统Animation,按Unity文档的惯例:知识点主要分2部分:unity manual和unity script,读者可以边看 ...
- [BUUOJ记录] [GXYCTF2019]Ping Ping Ping
主要考察RCE的防护绕过,感觉考的还是比较全的 先构造Payload: ?ip=127.0.0.1;ls 看到目录下有两个文件,fuzz一下发现过滤了 空格 / + * ? { } ( ) [ ]等符 ...
- Myabtis动态SQL,你真的会了吗?
目录 前言 什么是动态SQL? 常用的标签 if choose.when.otherwise where foreach set sql include 总结 拓展一下 Mybatis中如何避免魔数? ...
- 时间选择器 element
<el-date-picker type="datetime" placeholder="选择上线日期" :picker-options="st ...
- 01vue.config.js
const path = require('path'); module.exports = { // 基本路径 publicPath: process.env.NODE_ENV === 'pro ...
- 跟着尚硅谷系统学习Docker-【day05】
day05-20200717 p21.docker容器数据卷容器 就是活动硬盘上面挂载硬盘进行数据的传递. [docker run -it --name dc01 fyr/centos ...