题目

农夫约的农庄里有\(N\)个仓库,排成了一排,编号为\(1~N\)。

假设猫在第\(i\)个仓库点燃艾条,烟雾就会充满该仓库,并向左右扩散\(Ai\)的距离,接着所有\(|i-j|<=Ai\) 的仓库\(j\) 的老鼠被消灭。

猫是一只爱护空气环境的好猫,它希望知道最少需要多少支艾条,才可以消灭所有老鼠。


分析

考虑处理出每个右端点能同时扩散的最小的左端点,

那么状态转移方程显然,用数据结构维护


代码

  1. #include <cstdio>
  2. #include <cctype>
  3. #include <cstring>
  4. #define rr register
  5. using namespace std;
  6. const int N=500011; int c[N],f[N],dp[N],n;
  7. inline signed iut(){
  8. rr int ans=0; rr char c=getchar();
  9. while (!isdigit(c)) c=getchar();
  10. while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();
  11. return ans;
  12. }
  13. inline signed min(int a,int b){return a<b?a:b;}
  14. inline signed fan(int x){return n-x+1;}
  15. inline signed query(int x){
  16. rr int ans=f[0];
  17. for (;x;x-=-x&x)
  18. ans=min(ans,c[x]);
  19. return ans;
  20. }
  21. inline void update(int x,int y){
  22. for (;x<=n;x+=-x&x) c[x]=min(c[x],y);
  23. }
  24. signed main(){
  25. freopen("cat.in","r",stdin);
  26. freopen("cat.out","w",stdout);
  27. n=iut()+1,memset(f,0x3f,sizeof(f));
  28. for (rr int i=1;i<n;++i){
  29. rr int x=iut(),R=min(i+x,n-1);
  30. f[R]=min(f[R],(i<=x)?1:(i-x));
  31. }
  32. memset(c,0x3f,sizeof(c)),update(fan(1),dp[1]=0);
  33. for (rr int i=1;i<n;++i) if (f[i]<=i)
  34. update(fan(i+1),dp[i+1]=query(fan(f[i]))+1);
  35. return !printf("%d",dp[n]);
  36. }

#树状数组、dp#JZOJ 5361 捕老鼠的更多相关文章

  1. codeforces 597C (树状数组+DP)

    题目链接:http://codeforces.com/contest/597/problem/C 思路:dp[i][j]表示长度为i,以j结尾的上升子序列,则有dp[i][j]= ∑dp[i-1][k ...

  2. hdu 4622 Reincarnation trie树+树状数组/dp

    题意:给你一个字符串和m个询问,问你l,r这个区间内出现过多少字串. 连接:http://acm.hdu.edu.cn/showproblem.php?pid=4622 网上也有用后缀数组搞得. 思路 ...

  3. Codeforces 597C. Subsequences (树状数组+dp)

    题目链接:http://codeforces.com/contest/597/problem/C 给你n和数(1~n各不同),问你长为k+1的上升自序列有多少. dp[i][j] 表示末尾数字为i 长 ...

  4. HDU2227Find the nondecreasing subsequences(树状数组+DP)

    题目大意就是说帮你给出一个序列a,让你求出它的非递减序列有多少个. 设dp[i]表示以a[i]结尾的非递减子序列的个数,由题意我们可以写出状态转移方程: dp[i] = sum{dp[j] | 1&l ...

  5. CodeForces - 314C Sereja and Subsequences (树状数组+dp)

    Sereja has a sequence that consists of n positive integers, a1, a2, ..., an. First Sereja took a pie ...

  6. HDU 6348 序列计数 (树状数组 + DP)

    序列计数 Time Limit: 4500/4000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total Subm ...

  7. [Codeforces261D]Maxim and Increasing Subsequence——树状数组+DP

    题目链接: Codeforces261D 题目大意:$k$次询问,每次给出一个长度为$n$的序列$b$及$b$中的最大值$maxb$,构造出序列$a$为$t$个序列$b$连接而成,求$a$的最长上升子 ...

  8. 【XSY2727】Remove Dilworth定理 堆 树状数组 DP

    题目描述 一个二维平面上有\(n\)个梯形,满足: 所有梯形的下底边在直线\(y=0\)上. 所有梯形的上底边在直线\(y=1\)上. 没有两个点的坐标相同. 你一次可以选择任意多个梯形,必须满足这些 ...

  9. hdu5489 树状数组+dp

    2015-10-06 21:49:54 这题说的是个给了一个数组,然后删除任意起点的一个连续的L个数,然后求最长递增子序列<是递增,不是非递减>,用一个树状数组维护一下就ok了 #incl ...

  10. hdu5125 树状数组+dp

     hdu5125 他说的是n个人每个人都有两个气球a,b,气球各自都有相应的体积,现在让他们按照序号排列好来,对他们的a气球体积值计算最长上升子序列,对于这整个排列来说有m次机会让你将a气球替换成b气 ...

随机推荐

  1. 麒麟系统开发笔记(五):制作安装麒麟系统的启动U盘、物理机安装麒麟系统以及搭建Qt开发环境

    前言   电脑从U盘装麒麟系统,搭建实机Qt开发运行环境.   制作麒麟系统U盘(使用LiveUSB) 步骤一:先准备个至少8GB的U盘   之前购买的一批联想U盘,如下图:    查看U盘:   步 ...

  2. 案例分享:Qt高频fpga采集数据压力位移速度加速度分析系统(通道配置、电压转换、采样频率、通道补偿、定时采集、距离采集,导出exce、自动XY轴、隐藏XY轴、隐藏显示通道,文件回放等等)

    需求   1.0-7通道压力采集,采集频率1~100Khz(1,10,20,30-1000Khz):  2.0-7通道压力,可设置补偿值,测量范围:  3.编码器0,1脉冲采集,计算位移,速度,加速度 ...

  3. linux下docker安装与初始

    1 docker的安装与使用初识 1 docker的安装 # step 1: 安装必要的一些系统工具 sudo yum install -y yum-utils device-mapper-persi ...

  4. Google Chrome 开启多下载下载,提高文件下载速度

    在地址栏输入: chrome://flags/#enable-parallel-downloading Parallel downloading改为Enabled后重启浏览器即可打开多线程下载 (多线 ...

  5. AI与人类联手,智能排序人类决策:RLHF标注工具打造协同标注新纪元,重塑AI训练体验

    AI与人类联手,智能排序人类决策:RLHF标注工具打造协同标注新纪元,重塑AI训练体验 在大模型训练的 RLHF 阶段,需要人工对模型生成的多份数据进行标注排序,然而目前缺乏开源可用的 RLHF 标注 ...

  6. 如何在矩池云上运行 AI 图像编辑工具 DragGAN

    5 月,DragGAN 横空出世,在开源代码尚未公布前,就在Github上斩获近 20000 Star,彼时,页面上只有效果图和一句"Code will be released in Jun ...

  7. ui转py文件

    ui文件转py文件并且使用 简单做一个笔记,以后忘了回来看看 转换 在QT Designer中创建完ui文件后,回到pycharm中,右键点击ui文件,选择pyuic 完成后获得了和ui文件同名的py ...

  8. React函数式组件使用@emotion时一定要注意的问题!

    怎么说呢,一个坑,踩了两天,总觉得是useSate和input的传值方法问题 在useMemo和useCallback反复测试问题 最后没办法,通过最傻方式,一点点注释代码,发现了问题 const C ...

  9. map 简单梳理【GO 基础】

    〇.map 简介 map 是一种无序的基于 key-value 的数据结构,Go 语言中的 map 是引用类型,必须初始化才能使用. 其中键可以是任何类型,但值必须是可比较的类型(如整数.字符串.布尔 ...

  10. 那些.NET中的连接池

    前言 在.NET中,连接池被广泛用于管理和优化不同类型资源的连接.连接池可以减少建立和关闭连接所需的时间和资源消耗,从而提高了应用程序的性能和响应能力. HttpClient中的连接池 System. ...