BZOJ5324 洛谷4563 LOJ2545:[JXOI2018]守卫——题解

news/2024/7/1 4:58:57

https://www.lydsy.com/JudgeOnline/problem.php?id=5324

https://www.luogu.org/problemnew/show/P4563

https://loj.ac/problem/2545

题目见上。

参考:https://blog.csdn.net/dofypxy/article/details/80196942

区间dp,设f[i][j]为[i,j]的答案,see[i][j]为i是否能看到j。

显然see数组可以O(n^2)处理,通过斜率很容易处理。

然后就是O(n^2)处理f,emm很不好想。

思考当你在[i,j]区间内放保镖的时候,j肯定要放一个保镖,然后对于j看不到的地方,我们视为区间[ii,jj]。

我们给出结论:为了覆盖这个区间,我们一定需要在jj或jj+1处放一个保镖。这个结论很容易证明。

于是我们就有了f[i][j]=sigma(min(f[ii][jj],f[ii][jj+1]))+1。这个递推式是O(n^3)的。

但是因为当j固定时,移动i,其转移方程有重合的部分,于是可以O(n^2)处理,具体可以看代码。

#include<cmath>
#include<queue>
#include<cstdio>
#include<cctype>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
typedef double dl;
const int N=5010;
const int INF=2e9;
inline int read(){int X=0,w=0;char ch=0;while(!isdigit(ch)){w|=ch=='-';ch=getchar();}while(isdigit(ch))X=(X<<3)+(X<<1)+(ch^48),ch=getchar();return w?-X:X;
}
bool see[N][N];
int n,h[N],f[N][N],len[N];
dl slope(int a,int b){return (dl)(h[a]-h[b])/(a-b);
}
int main(){n=read();h[0]=INF;for(int i=1;i<=n;i++){h[i]=read();int l,r;see[i][i]=see[i][i-1]=1;dl k=slope(i-1,i);for(int j=i-2;j>=1;j--){while(j&&slope(j,i)>=k){see[i][j--]=0;}k=slope(j,i);see[i][j]=1;}}int ans=0;for(int r=1;r<=n;r++){int s=1,t=0;for(int l=r;l;l--){if(see[r][l]){if(!see[r][l-1])t=l-1;f[l][r]=s;}else{f[l][r]=s+min(f[l][t],f[l][t+1]);if(see[r][l-1])s+=min(f[l][t],f[l][t+1]);}ans^=f[l][r];}}printf("%d\n",ans);return 0;
}

+++++++++++++++++++++++++++++++++++++++++++

+本文作者:luyouqi233。               +

+欢迎访问我的博客:http://www.cnblogs.com/luyouqi233/+

+++++++++++++++++++++++++++++++++++++++++++

转载于:https://www.cnblogs.com/luyouqi233/p/9083955.html


http://lihuaxi.xjx100.cn/news/238082.html

相关文章

领导让我重构代码_领导不是由代码构成

领导让我重构代码The team leader is a key figure in a team of developers. It is a difficult role, involving both technical and social skills. This is the reason why not everyone is tailored for it.团队负责人是开发人员团队中的关键人物。 这是一项艰巨的任务&am…

FTP搭建

1、FTP简介&#xff1a; 在FTP的使用当中&#xff0c;用户经常遇到两个概念&#xff1a;"下载"&#xff08;Download&#xff09;和"上传"&#xff08;Upload&#xff09;。 "下载"文件就是从远程主机拷贝文件至自己的计算机上&#xff1b; &…

SpringMVC学习二

使用POJO作为参数 web.xml <?xml version"1.0" encoding"UTF-8"?> <web-app version"3.0" xmlns"http://java.sun.com/xml/ns/javaee" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocatio…

考csp所需算法_CSP vs RxJS:您所不知道的。

考csp所需算法by Kevin Ghadyani通过凯文加迪亚尼(Kevin Ghadyani) CSP vs RxJS&#xff1a;您所不知道的。 (CSP vs RxJS: what you don’t know.) CSP发生了什么&#xff1f; (What happened to CSP?) You probably clicked this article thinking “what is CSP?” It’s…

哈希函数是什么,在区块链中有什么用?

想知道更多关于区块链技术知识&#xff0c;请百度【链客区块链技术问答社区】 链客&#xff0c;有问必答&#xff01;哈希函数是什么&#xff1f; 哈希函数&#xff0c;又叫散列函数、散列算法&#xff0c;是一种从任何一种数据中创建小的数字“指纹”&#xff08;也叫做摘要&a…

深入学习Lock锁(2)——LockSupport工具类

2019独角兽企业重金招聘Python工程师标准>>> 在同步组件中&#xff0c;当需要阻塞或唤醒一个线程的时候&#xff0c;都会使用LockSupport工具类来完成相应 工作。LockSupport定义了一组的公共静态方法&#xff0c;这些方法提供了最基本的线程阻塞和唤醒功能&#xf…

自动化运维工具Saltstack(一)

1、saltstack简介&#xff1a; 什么是saltstack&#xff1f; saltstack是基于python开发的一套C/S架构配置管理工具 使用SSL证书签方的方式进行认证管理 号称世界上最快的消息队列ZeroMQ使得SaltStack能快速在成千上万台机器上进行各种操作 采用RSA Key方式确认身份 传输采用AE…

JavaScript词法作用域的简单介绍

by Michael McMillan迈克尔麦克米兰(Michael McMillan) JavaScript词法作用域的简单介绍 (An easy intro to Lexical Scoping in JavaScript) Lexical scoping is a topic that frightens many programmers. One of the best explanations of lexical scoping can be found in…