评测传送门

【题目描述】
  已知花坛为一个 n * m 的矩形,草只会长在某些个格子上,zzd 有一个割草机,一开始,
zzd 站在(1,1)处,面向(1,m)(面向右).每次 zzd 有两个选择(耗费一个单位时间):
    1:向自己面朝的方向移动一格。
    2:向下移动一格,并改变自己的朝向。
  但 zzd 不能向上移动,也不能后退,因为他喜欢 DP,不想有后效性.
     只要 zzd 移动到有杂草的格子,zzd 会清除杂草(不需要耗时)。现在,zzd 想知道最少要耗费多少时间才能清除所有杂草。
【输入】
    第一行 n,m.  接下来 n 行,每行 m 个字符,其中'W'表示杂草,'G'表示空地。
【输出】
    至少要耗费多少时间才能清除所有杂草。
【样例】
  Lawnmower.in
  4 5
  GWGGW
  GGWGG
  GWGGG
  WGGGG
  Lawnmower.out
  11

【数据范围】
  n,m<=150

思路:

  虽然zzd很喜欢DP 但是我并不知道怎么用DP做 ???

  感觉是模拟啊

  由题目可以知道:在奇数行 zzd的方向一定是向右的

          在偶数行 zzd的方向一定是向左的

  然后算出每行走到什么位置就可以了

  输入的时候只要存 l[ ],r[ ] 表示每行最左边的杂草的列数 和最右边的杂草列数

  再记一下每一行的总杂草数s[ ] 就可以啦

  然后特别要注意特判 考虑几种特殊情况:

  1.这一行没有杂草 但是下一行有

   假如这一行要向左走 那么取 min的时候就会选到0了

  2.这一行没有杂草 并且此时要向左走 但是下一行有

   但是下一行最左边的杂草在现在所在位置的右边

      如果不特判它对答案的贡献将为负

  3.还有几行格子没走完 但是已经清理完所有的杂草了

     直接输出答案结束程序即可

  还有一个注意的点,关于统计答案的:

   假如这行从 a 走到 b 那么ans+=b-a+1

   后面这个+1是因为 走完这一行之后就要向下走到下一行

   但是当你割最后一束杂草的时候是不需要再往下走了

   所以最后的 ans 要 -1

CODE:

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<string>
 4 #define go(i,a,b) for(register int i=a;i<=b;i++)
 5 #define yes(i,a,b) for(register int i=a;i>=b;i--)
 6 #define M 150+10
 7 using namespace std;
 8 int read()
 9 {
10     int x=0,y=1;char c=getchar();
11     while(c<'0'||c>'9') {if(c=='-') y=-1;c=getchar();}
12     while(c>='0'&&c<='9') {x=(x<<1)+(x<<3)+c-'0';c=getchar();}
13     return x*y;
14 }
15 string s;
16 int n,m,ans,nw=1,res,l[M],r[M],sm[M];
17 int main()
18 {
19     freopen("Lawnmower.in","r",stdin);
20     freopen("Lawnmower.out","w",stdout);
21     n=read();m=read();
22     go(i,1,n)
23     {
24         cin>>s;
25         go(j,0,m-1) if(s[j]=='W') { if(!l[i]) l[i]=j+1; r[i]=j+1;sm[i]++;res++;}
26     }
27     go(i,1,n)
28     {
29         if(i%2) //奇数行
30         {
31             int right=max(r[i],r[i+1]);
32             if(!right && i==n) right=r[i];
33             if(!right || right<nw) right=nw;
34             ans+=right-nw+1;nw=right;res-=sm[i];
35         }
36         else //偶数行
37         {
38             int left=min(l[i],l[i+1]);
39             if(!left && l[i]) left=l[i];
40             if(!left && l[i+1]) left=l[i+1];
41             if(!left || left>nw) left=nw;
42             ans+=nw-left+1;nw=left;res-=sm[i];
43         }
44         if(!res) break ;
45     }
46     printf("%d",ans-1);
47     return 0;
48 }

View Code

转载于:https://www.cnblogs.com/forward777/p/10330199.html

zzd 的割草机(Lawnmower)相关推荐

  1. 为什么需要api产品经理

    It is very possible that your company is doing APIs wrong. Your organization may conflate REST with ...

  2. csdn邻家割草_如何维护割草机,使其永远持续(几乎)

    csdn邻家割草 The lawnmower is one of those tools that many people don't really think much about except f ...

  3. 智能机器人路径规划及代码_AI割草机器人用ML+传感器自动规划路径

    作者:DIGITIMES谢明珊 Graze Mowing发表全新自动割草机器人,可针对中大型商用空间提高景观维护效率,吸引来自世界各地的高尔夫球场以及景观维护公司的询问,已累积1,900多万美元预购订 ...

  4. 特斯拉电池检测_特斯拉风格的割草机,也是采用电池供电

    工业设计师 Prokop Strnka 认为,特斯拉最终将投资除太阳能电池板和电池组以外的更多家用产品.所以他设计了 TeslaG.这台自动割草机使用 Tesla 的自动驾驶算法和技术主动扫描其环境, ...

  5. 一款简易低成本智能割草机的制作——硬件篇

    概述 近年来,随着大家环保意识和生活水平的提高,不少人开始在庭院里种植了小花小草.但是由于没有定期管理,很多庭院变得杂草丛生,不仅不美观,还引来一群蚊子昆虫在这安居乐业.尤其天热的时候,室外温度三四十 ...

  6. ROS自主驾驶割草机

    目录 简介 割草机底盘改装 自主导航硬件系统 室内测试 室外测试 交流方式 简介 项目起源是客户说要做一个基于激光雷达的自动驾驶与避障的割草机,个人觉得我手头上刚好有基于ROS轮毂无刷电机驱动动器,这 ...

  7. Wannafly挑战赛4,C题割草机,(模拟)

    https://www.nowcoder.com/acm/contest/35/C 割草机 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K 64bi ...

  8. Lawnmower(除草)

    Lawnmower You have a garden consisting entirely of grass and weeds. Your garden is described by an n ...

  9. CF115B Lawnmower

    题目描述 You have a garden consisting entirely of grass and weeds. Your garden is described by an n×mn×m ...

最新文章

  1. from beautifulsoup4 import BeautifulSoup 报错
  2. 剑指offer十二:数值的n次方
  3. 【JAVASCRIPT】无刷新评论
  4. c++ memory 头文件详细介绍
  5. Ember.js 入门指南——路由重定向
  6. Oracle并行事务回滚相关参数及视图
  7. java面向对象计算机与CD实验,Java面向对象上机实验指导书.doc
  8. Fedora core 2下建立Poptop服务器以及常见问题
  9. 在linux中常用的shell备份脚本(波大帅哥)
  10. IE8的css hack
  11. 分布式设计 —— 容错与主备
  12. 本示例主要展示如何在XtraGrid网格控件(包含在DevExpress WinForms套包中)的主视图中指定HyperLinkEdit控件作为列编辑器...
  13. Asp.net SQL注入实例分享
  14. mysql+join+合计_图解MySQL里的各种 JOIN,看完不懂来找我!
  15. 如何实现一个简单的熔断以及Hystrix原理分析
  16. CFS任务的负载均衡(框架篇)
  17. linux环境变量中无cc,Linux环境变量
  18. div+css需要注意的问题
  19. 多目标跟踪(Multi-Object-Tracking)入门
  20. python在abaqus中的应用pdf_Python语言在Abaqus中的应用

热门文章

  1. 网络工程师成长日记138-前途迷茫和年龄无关
  2. YumRepo Error: All mirror URLs are not using ftp, http[s] or file解决办法
  3. 转载Shell 数组学习
  4. 机器学习——神经网络实验(附全过程代码)
  5. module 与 component 的区别
  6. 什么是web前端开发工程师?主要做什么的?
  7. sentinel限流入门
  8. CC00307.CloudKubernetes——|KuberNetes运维.V27|——|监控.v04|PromQL查询_运算符|
  9. (SSM解析错误)$%7BpageContext.request.contextPath%7D/account/save
  10. IIS配置php+soap