链接

https://loj.ac/problem/2545

思路

f[i][j]表示i到j区间的最小监视人数

可以预处理出来g[i][j],表示i能否监视到j

(其实预处理的关系不大,完全可以直接判断,不过比较不能加=)

一个区间\([l,r]\),一定会选r,显然

然后只要管r不能监视的地方\([x,y]\)(多个)

加上f[x][y]或者f[x][y+1]的贡献

%%attack

菜误

题目都没读清楚

一边写一边想,改了又改,调了又调(虽然比sb数据结构调的快)

代码ps:我的数组貌似是反着来的,不过都一样

#include <iostream>
#include <cstdio>
#include <cstring>
#define ll long long
using namespace std;
const ll N=5e4+7;
ll read() {
ll x=0,f=1;char s=getchar();
for(;s>'9'||s<'0';s=getchar()) if(s=='-') f=-1;
for(;s>='0'&&s<='9';s=getchar()) x=x*10+s-'0';
return x*f;
}
ll n,h[N],js[N],q[N];
ll f[5007][5007],g[5007][5007];
int main() {
// freopen("gurad4.in","r",stdin);
n=read();
for(ll i=1;i<=n;++i) h[i]=read();
for(ll i=1;i<=n;++i) {
g[i][i-1]=g[i][i]=1;q[1]=i-1;
for(ll j=i-2,top=1;j>=1;--j) {
if((h[i]-h[j])*(i-q[top]) < (h[i]-h[q[top]])*(i-j)) {
q[++top]=j;
g[i][j]=1;
}
}
}
// for(int i=1;i<=n;++i) {
// for(int j=1;j<=n;++j) {
// cout<<g[i][j]<<" ";
// }
// cout<<"\n";
// }
memset(f,0x3f,sizeof(f));
for(ll i=1;i<=n;++i) {
f[i][i]=1;
for(ll j=i-1;j>=1;--j) {
if(g[i][j]) f[i][j]=f[i][j+1];
else {
for(int r=j;!g[i][j]&&j>=1;--j)
f[i][j]=f[i][r+1]+min(f[r][j],f[r+1][j]);
++j;
}
}
}
ll ans=0;
for(ll i=1;i<=n;++i) {
for(ll j=1;j<=i;++j) {
ans=ans^f[i][j];
// cout<<f[i][j]<<" ";
}
// cout<<"\n";
}
printf("%lld\n",ans);
return 0;
}

JXOI2018守卫 区间DP的更多相关文章

  1. BZOJ5324 JXOI2018守卫(区间dp)

    对于每个区间[l,r],显然右端点r是必须放置守卫的.考虑其不能监视到的点,构成一段段区间.一个非常显然但我就是想不到的性质是,对于这样的某个区间[x,y],在(y+1,r)内的点都是不能监视到这个区 ...

  2. [JXOI2018]守卫

    嘟嘟嘟 正如某题解所说,这题很有误导性:我就一直在想凸包. 随便一个数据,就能把凸包hack掉: 这样我们的点G就gg了. 所以正解是什么呢?dp. 题解看这位老哥的吧,我感觉挺好懂的:题解 P456 ...

  3. 【BZOJ5324】[JXOI2018]守卫(动态规划)

    [BZOJ5324][JXOI2018]守卫(动态规划) 题面 BZOJ 洛谷 题解 既然只能看到横坐标在左侧的点,那么对于任意一个区间\([l,r]\)而言,\(r\)必须被选. 假设\(r\)看不 ...

  4. 【BZOJ-4380】Myjnie 区间DP

    4380: [POI2015]Myjnie Time Limit: 40 Sec  Memory Limit: 256 MBSec  Special JudgeSubmit: 162  Solved: ...

  5. 【POJ-1390】Blocks 区间DP

    Blocks Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 5252   Accepted: 2165 Descriptio ...

  6. 区间DP LightOJ 1422 Halloween Costumes

    http://lightoj.com/volume_showproblem.php?problem=1422 做的第一道区间DP的题目,试水. 参考解题报告: http://www.cnblogs.c ...

  7. BZOJ1055: [HAOI2008]玩具取名[区间DP]

    1055: [HAOI2008]玩具取名 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1588  Solved: 925[Submit][Statu ...

  8. poj2955 Brackets (区间dp)

    题目链接:http://poj.org/problem?id=2955 题意:给定字符串 求括号匹配最多时的子串长度. 区间dp,状态转移方程: dp[i][j]=max ( dp[i][j] , 2 ...

  9. HDU5900 QSC and Master(区间DP + 最小费用最大流)

    题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=5900 Description Every school has some legends, ...

随机推荐

  1. 混合型log,info按大小分,error按日期

    1.配置文件 <?xml version="1.0" encoding="utf-8"?> <configuration> <!- ...

  2. 手动创建mfc工程(留存方便复制)

    案例一. #include <afxwin.h> class CMyWnd : public CWnd { //DECLARE_DYNCREATE(CMyWnd) public: CMyW ...

  3. 关于django编码问题所导致的502错误

    在使用django开发的时候,访问网站出现了502错误,次数也比较平繁 uwsgi+nginx+django 在命令行下提示如下错误 : File "/opt/apps/python3/li ...

  4. JavaScript三种判断语句和三元运算符

    三种判断语句 1.if结构 语法:if(条件){条件满足时执行的代码块} 2.if else结构 语法:if(条件){条件满足时执行的代码块}   else{条件不满足时执行的代码块} 3.if el ...

  5. html5-button元素

    <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8&qu ...

  6. 20155228 2016-2017-2 《Java程序设计》第1周学习总结

    20155228 2016-2017-2 <Java程序设计>第1周学习总结 教材学习内容总结 这部分内容是以教材为基础,根据个人的理解来描述的,有的地方的理解和表述可能不规范甚至不正确, ...

  7. impala与hive的比较以及impala的有缺点

    最近读的几篇关于impala的文章,这篇良心不错:https://www.biaodianfu.com/impala.html(本文截取部分内容) Impala是Cloudera公司主导开发的新型查询 ...

  8. RN与android原生开发混合后的环境报错问题

    RN与android原生开发混合后的环境报错问题 需要先安装nodejs$ yarn --version1.12.1更新当前版本yarn upgrade --latest安装 | Yarnhttps: ...

  9. JavaScript:原生JS实现Facebook实时消息抓捕

    基础知识准备: HTML5给我们提供了一个新的对象叫作:MutationObserver.为了兼容,还有WebKitMutationObserver.MozMutationObserver,挂靠在wi ...

  10. IPERF 网络性能测试

    Iperf 是一个网络性能测试工具.Iperf可以测试最大TCP和UDP带宽性能.Iperf具有多种参数和UDP特性,可以根据需要调整.Iperf可以报告带宽,延迟抖动和数据包丢失. Iperf 参数 ...