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=;
const int INF=2e9;
inline int read(){
int X=,w=;char ch=;
while(!isdigit(ch)){w|=ch=='-';ch=getchar();}
while(isdigit(ch))X=(X<<)+(X<<)+(ch^),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[]=INF;
for(int i=;i<=n;i++){
h[i]=read();
int l,r;
see[i][i]=see[i][i-]=;
dl k=slope(i-,i);
for(int j=i-;j>=;j--){
while(j&&slope(j,i)>=k){
see[i][j--]=;
}
k=slope(j,i);see[i][j]=;
}
}
int ans=;
for(int r=;r<=n;r++){
int s=,t=;
for(int l=r;l;l--){
if(see[r][l]){
if(!see[r][l-])t=l-;
f[l][r]=s;
}else{
f[l][r]=s+min(f[l][t],f[l][t+]);
if(see[r][l-])s+=min(f[l][t],f[l][t+]);
}
ans^=f[l][r];
}
}
printf("%d\n",ans);
return ;
}

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

+本文作者:luyouqi233。               +

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

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

最新文章

  1. [原创] Delphi小工具(Windows资源管理器右键菜单扩展)
  2. 通过VLD扩展分析PHP opcode
  3. navicat使用
  4. DIY操作系统(引文)
  5. AVAudioPlayer播放并实现了后台播放和远程控制
  6. php读取csv文件,在linux上出现中文读取不到的情况 解决方法
  7. PAT乙级 1019. 数字黑洞 (20)
  8. php+jquery注册实例
  9. 黑马程序猿 IO流 ByteArrayInputStream与ByteArrayOutputStream
  10. Sql Server 列转行 Pivot使用
  11. struts2对action中的方法进行输入校验(2)
  12. jconsole 连接 eclipse启动项
  13. PRINCE2的好处是什么?使用PRINCE2受益非浅
  14. Bootstrap提示框
  15. flutter 本地存储 (shared_preferences)
  16. PHP超精简文章管理系统 Summer Article
  17. MySQL学习----unsigned 无符号的总结
  18. RBAC: 基于角色的访问控制(Role-Based Access Control)
  19. WebAPI 消息处理器
  20. Perl操作Oracle

热门文章

  1. linux进程的学习笔记(未完)
  2. ElasticSearch搜索引擎在JavaWeb项目中的应用
  3. Kotlin Android Extensions: 与 findViewById 说再见 (KAD 04) -- 更新版
  4. springboot在application.yml中使用了context-path属性导致静态资源法加载,如不能引入vue.js,jquery.js,css等等
  5. C do whlie 数数位
  6. 【system.file】使用说明
  7. linux学习总结----redis总结
  8. 166. Nth to Last Node in List
  9. Ubuntu 16.04 安装显卡驱动后循环登录和无法设置分辨率的一种解决方案
  10. Android屏幕适配解析 - 详解像素,设备独立像素,归一化密度,精确密度及各种资源对应的尺寸密度分辨率适配问题