尺取算法也叫毛毛虫算法,因为计算过程有点类似毛毛虫一点点的往前挪,在挪动的过程中可以得到一些需要的解。(自动脑补)
通过两个变量来保存所选取区间的左右端点,然后不断的推进区间,寻找所需要的答案(尺取的精髓),其实也是一种暴力枚举方法,不过是有技巧的枚举,所以尺取算法比一般的算法快的多,尤其是数据量比较大的时候,尺取就显得非常有用,所以也是acm经常用到的算法之一。

通过一个例题来理解这个算法

冬天与火锅更配

冬日里的一抹暖阳总是能给人们留下深刻的记忆,人们喜爱冬天的太阳,就跟人们喜爱冬天的火锅一般。
寒冷的冬天总会让人想起火锅,最近小Z特别想去吃火锅,刚好某家转转火锅刚开业有活动,有n盘火锅围成一个圈,第一盘和最后一盘是相连的,每一盘火锅都有一个价值a[i],现在可以吃连续的m盘火锅,小Z想知道他所吃的那连续的m盘火锅的最大价值可以是多少?你能帮帮憨憨的小Z吗。

输入格式

第一行数入两个整数n,m(1<=m<=n<=2000000),分别表示火锅的盘数和可以吃的连续的盘数
第二行输入n的数a[i] (1<=a[i]<=100000),分别表示每一盘火锅的价值

输出格式

输出一个整数,表示连续m盘火锅的最大价值

样例输入

5 3
6 1 2 5 3

样例输出

14

分析:

这个题实际就是求连续m个数和的最大值,想必很多人也是一开始暴力模拟一遍,然后提交是时间超限,这里最坏的时间复杂度是O(n^2),这个题的数据量比较大,所以考虑用尺取。
下面看一下核心代码

#include<stdio.h>
int main()
{int n,m;while(scanf("%d%d",&n,&m)!=EOF){int a[n];int t=0;//表示推进的mint tail=0;//表示毛毛虫的尾巴long long max1=-1;//所求的最大值long long sum=0;for(int i=0;i<n;i++)scanf("%d",a+i);while(1)//尾巴不爬到最后就一直往前爬{while(t<m)//毛毛虫向前爬m个位置{int tt=tail+t;if(tt>=n)//头爬到最后得到第一个位置去tt%=n;sum+=a[tt];t++;}if(sum>max1)max1=sum;sum-=a[tail];//得到一次连续m个数和之后减去尾巴的值tail++;//尾巴向前挪一个if(tail==n-1)break;//如果尾巴到了最后一个就可以退出了t--;//长度减一(尾巴)}printf("%lld\n",max1);}
}

可以看出尺取把原来的时间复杂度O(n^2)变成了O(n),在效率上得到了很多的提高。

尺取--(毛毛虫算法)相关推荐

  1. 毛毛虫算法——尺取法

    有这么一类问题,需要在给的一组数据中找到不大于某一个上限的"最优连续子序列" 于是就有了这样一种方法,找这个子序列的过程很像毛毛虫爬行方式,我管它叫毛毛虫算法,比较流行的叫法是&q ...

  2. 牛客多校9 - Groundhog Looking Dowdy(尺取)

    题目链接:点击查看 题目大意:给出 n 天,每天可以有数件衣服可以选择,但每天只能选择一件衣服穿,每件衣服都有权值,现在需要挑出 m 天的衣服,使得最大值与最小值之差最小 题目分析:比赛时为了恰烂分用 ...

  3. 【尺取或dp】codeforces C. An impassioned circulation of affection

    http://codeforces.com/contest/814/problem/C [题意] 给定一个长度为n的字符串s,一共有q个查询,每个查询给出一个数字m和一个字符ch,你的操作是可以改变字 ...

  4. 洛谷 - P1381 - 单词背诵 - 哈希 - 尺取

    https://www.luogu.org/problemnew/show/P1381 字符串匹配,用哈希总没有错的. 然后就是尺取了,题目要求首先尽可能多覆盖,那么每次尾巴往后面长. 一开始先找到第 ...

  5. POJ 3320 Jessica's Reading Problem (尺取)

    Description 给出一段长度为\(n\)的整数序列,求包含所有出现过的数的连续区间的最小长度. Input 第一行给出序列长度\(n\),第二行给出\(n\)个整数,表示这个序列.\(n \l ...

  6. 部分和问题 (dfs搜索 尺取)

    部分和问题 给定整数a1, a2, a3, a4,  ..........   ,  an  ,判断是否可以从中取出若干个数,使得他们的和恰好为k  . 1  <= n <= 20 测试数 ...

  7. Innumerable Ancestors 尺取 dfs序 lca

    给一棵树,m次查询,每次查询给两个集合,从这两个集合中分别选一个结点,使得这两个结点的lca的深度最大 考虑dfs序为3, 4, 5的三个结点,3和4的lca深度一定大于等于3和5的lca深度 所以可 ...

  8. C语言快速幂取模算法小结

    资料链接:http://www.jb51.net/article/54947.htm C语言实现的快速幂取模算法,是比较常见的算法.分享给大家供大家参考之用.具体如下: 首先,所谓的快速幂,实际上是快 ...

  9. Codeforces Round #321 (Div. 2) B. Kefa and Company (尺取)

    排序以后枚举尾部.尺取,头部单调,维护一下就好. 排序O(nlogn),枚举O(n) #include<bits/stdc++.h> using namespace std; typede ...

最新文章

  1. ceph 集群 健康状态 监管
  2. 宿主机访问虚拟机中xampp搭建的站点失败
  3. 安装百分之80卡住_石家庄铜铝80*80散热器品牌
  4. java 可视化_可视化Java 9模块关系
  5. 语音识别学习日志 2019-7-16 语音识别基础知识准备5 {决策树算法(ID3、 C4.5、 CART)}
  6. 实用简洁的问答/社区系统
  7. JSP:src路径里有中文,产生乱码问题
  8. GDAL库中WFS服务中含有中文不能获取数据的问题
  9. iphone开发 拨打电话
  10. java filewriter写入文件_Java中的写入字符文件类FileWriter
  11. 【视频】Boosting集成学习原理与R语言提升回归树BRT预测短鳍鳗分布生态学实例
  12. Four-tuples 山东省赛F题
  13. 常用Java静态代码分析工具的分析与比较
  14. Netware 操作系统
  15. 什么是3322域名?3322域名如何注册?
  16. 新美大 java待遇_入我新美大的Java后台开发面试题总结
  17. 四旋翼无人机避障飞行
  18. 在spring.io网下下载的快速入门项目,导进去pom.xml文件爆红,报:Non-resolvable parent POM for com.tc:demo:0.0.1-SNAPSHOT: F
  19. 计算机二级有没有年龄,九龄童通过全国计算机二级 创年龄最小纪录(图)_新闻中心_新浪福建_新浪网...
  20. 基于javaweb的水果店商城超市系统(java+ssm+jsp+ajax+jquery+mysql)

热门文章

  1. 微信浏览器 WeixinJSBridge API
  2. Android 11 热点(softap)流程分析(二) WifiManager--AIDL
  3. 实战项目:设计实现一个流程编排框架(设计)
  4. 163 smtp port
  5. Arduino - 编程参考手册
  6. 一图掌握项目管理的核心工具WBS工作分解结构,PM必备技能
  7. 兰州理工大学计算机组成原理试题,2017年兰州理工大学计算机与通信学院895计算机组成原理考研仿真模拟题...
  8. 软件配置部分——从无到有自主搭建视觉惯性VI-SLAM(vins-mono)平台
  9. linux名词解释目录文件,Linux文件系统的文件都按其作用分门别类地放在相关的目录中,对于外部设备文件,一般应将其放在()目...
  10. 【MIMIC-IV/pytorch实战】基于word2vec、transformer进行英文影像报告文本分类