bzoj 3208 花神的秒题计划I

Description

背景【backboard】:

Memphis等一群蒟蒻出题中,花神凑过来秒题……

描述【discribe】:

花花山峰峦起伏,峰顶常年被雪,Memphis打算帮花花山风景区的人员开发一个滑雪项目。

我们可以把风景区看作一个nn的地图,每个点有它的初始高度,滑雪只能从高处往低处滑【严格大于】。但是由于地势经常变动【比如雪崩、滑坡】,高度经常变化;同时,政府政策规定对于每个区域都要间歇地进行保护,防止环境破坏。现在,滑雪项目的要求是给出每个nn个点的初始高度,并给出m个命令,C a b c表示坐标为a,b的点的高度改为c;S a b c d表示左上角为a,b右下角为c,d的矩形地区开始进行保护,即不能继续滑雪;B a b c d表示左上角为a b,右下角为c d的矩形地区取消保护,即可以开始滑雪;Q表示询问现在该风景区可以滑雪的最长路径为多少。对于每个Q要作一次回答。

花神一看,这不是超简单!立刻秒出了标算~

Input

第一行n,第二行开始n*n的地图,意义如上;接下来一个m,然后是m个命令,如上

Output

对于每一个Q输出单独一行的回答

滑雪的升级版?这看起来就是一个记忆化搜索的经典题滑雪改编过来的,而且也没有太多变化,实际上似乎也是这样.对于每一个修改的操作,我们就暴力按照它的来就好了.

代码如下

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <algorithm>
  4. using namespace std;
  5. static const int maxm=2e3+10;
  6. static const int INF=~(1<<31);
  7. int hgt[maxm][maxm],f[maxm][maxm],cant[maxm][maxm];
  8. int dx[]={1,0,-1,0};
  9. int dy[]={0,1,0,-1};
  10. char ch[10];
  11. int n,m;
  12. void mark(int x1,int y1,int x2,int y2,bool f){
  13. for(int i=x1;i<=x2;i++)
  14. for(int j=y1;j<=y2;j++)
  15. cant[i][j]=f;
  16. }
  17. int dfs(int x,int y){
  18. if(cant[x][y])return -INF;
  19. if(f[x][y])return f[x][y];
  20. f[x][y]=1;
  21. for(int i=0;i<=3;i++){
  22. int xx=x+dx[i];
  23. int yy=y+dy[i];
  24. if(xx<1||xx>n||yy<1||yy>n)continue;
  25. if(hgt[xx][yy]>hgt[x][y])f[x][y]=max(f[x][y],dfs(xx,yy)+1);
  26. }
  27. return f[x][y];
  28. }
  29. void change(int x,int y,int h){
  30. hgt[x][y]=h;
  31. }
  32. int main(){
  33. int x1,x2,y1,y2,x,y,c;
  34. scanf("%d",&n);
  35. for(int i=1;i<=n;i++)
  36. for(int j=1;j<=n;j++)
  37. scanf("%d",&hgt[i][j]);
  38. scanf("%d",&m);
  39. while(m--){
  40. scanf("%s",ch);
  41. if(ch[0]=='C')scanf("%d%d%d",&x,&y,&c),change(x,y,c);
  42. else if(ch[0]=='S')scanf("%d%d%d%d",&x1,&y1,&x2,&y2),mark(x1,y1,x2,y2,1);
  43. else if(ch[0]=='B')scanf("%d%d%d%d",&x1,&y1,&x2,&y2),mark(x1,y1,x2,y2,0);
  44. else if(ch[0]=='Q'){
  45. int ans=0;
  46. memset(f,0,sizeof f);
  47. for(int i=1;i<=n;i++)
  48. for(int j=1;j<=n;j++)
  49. ans=max(ans,dfs(i,j));
  50. printf("%d\n",ans);
  51. }
  52. }
  53. return 0;
  54. }

点我进入AC通道

bzoj 3208 花神的秒题计划I的更多相关文章

  1. BZOJ 3208: 花神的秒题计划Ⅰ

    这就是一道滑雪嘛= = 所有操作都爆力,求路径就dp,完了 CODE: #include<cstdio>#include<iostream>#include<algori ...

  2. bzoj3208: 花神的秒题计划Ⅰ

    3208: 花神的秒题计划Ⅰ Time Limit: 16 Sec  Memory Limit: 128 MBSubmit: 323  Solved: 211[Submit][Status] Desc ...

  3. BZOJ-3208|记忆化搜索-花神的秒题计划Ⅰ

    背景[backboard]: Memphis等一群蒟蒻出题中,花神凑过来秒题-- 描述[discribe]: 花花山峰峦起伏,峰顶常年被雪,Memphis打算帮花花山风景区的人员开发一个滑雪项目. 我 ...

  4. BZOJ3208:花神的秒题计划Ⅰ(记忆化搜索DP)

    Description 背景[backboard]: Memphis等一群蒟蒻出题中,花神凑过来秒题……   描述[discribe]: 花花山峰峦起伏,峰顶常年被雪,Memphis打算帮花花山风景区 ...

  5. bzoj3208:花神的秒题计划I

    思路:因为Q.S.B操作总和不超过100,因此怎么暴力怎么写....当然记忆化搜索还是要的 #include<cstdio> #include<iostream> #inclu ...

  6. 【记忆化搜索】bzoj3208 花神的秒题计划Ⅰ

    暴力 #include<cstdio> #include<cstring> #include<algorithm> using namespace std; #de ...

  7. 【bzoj3208】花神的秒题计划Ⅰ

    记忆化搜索 #include<algorithm> #include<iostream> #include<cstring> #include<cstdlib ...

  8. bzoj 前100题计划

    bzoj前100题计划 xz布置的巨大的坑.. 有空填题解... 1002 轮状病毒 用python手动matrixtree打表. #include<bits/stdc++.h> #def ...

  9. BZOJ第一页刷题计划

    BZOJ第一页刷题计划 已完成:67 / 90 [BZOJ1000]A+B Problem:A+B: [BZOJ1001][BeiJing2006]狼抓兔子:最小割: [BZOJ1002][FJOI2 ...

随机推荐

  1. java基础—数组

    一.数组的基本概念 数组可以看成是多个相同类型数据组合,对这些数据的统一管理. 数组变量属引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量. 数组的元素可以是任何数据类型,包括基 ...

  2. 【数学 BSGS】bzoj2242: [SDOI2011]计算器

    数论的板子集合…… Description 你被要求设计一个计算器完成以下三项任务: 1.给定y,z,p,计算Y^Z Mod P 的值: 2.给定y,z,p,计算满足xy≡ Z ( mod P )的最 ...

  3. sphinx关键字套红

    sphinx定义搜索结果,搜索的内容着重显示,可以使用下面代码 <?php /** * Created by PhpStorm. * User: pc00001 * Date: 2015/4/1 ...

  4. java实现可安装的exe程序

    java实现可安装的exe程序 通过编写Java代码,实现可安装的exe文件的一般思路: 1.在eclipse中创建java项目,然后编写Java代码,将编写好的Java项目导出一个.jar格式的ja ...

  5. 日志切割logrotate和定时任务crontab详解

    1.关于日志切割 日志文件包含了关于系统中发生的事件的有用信息,在排障过程中或者系统性能分析时经常被用到.对于忙碌的服务器,日志文件大小会增长极快,服务器会很快消耗磁盘空间,这成了个问题.除此之外,处 ...

  6. 【laravel】laravel class 里面定义以head开头的方法会报错

    BadMethodCallException in Macroable.php line 81:Method head does not exist.

  7. LeetCode(258) Add Digits

    题目 Given a non-negative integer num, repeatedly add all its digits until the result has only one dig ...

  8. selenium2 页面对象模型Page Object

    开发Selenium WebDriver测试时,可以使用页面对象模型,这样可使得测试脚本有更高的可维护性,减少了重复的代码,把页面抽象出来.同时页面对象模型也提供了一个注释,帮助缓存远程,避免出现元素 ...

  9. HBase0.94.2-cdh4.2.0需求评估测试报告1.0之三

    1.1.1 测试记录 第一组:一个列,一个分区,顺序ID 测试列和分区 测试程序或命令 导入文件大小(Mb) 导入文件个数(个) 是否触发flush事件(布尔) 是否触发compact事件(布尔) 触 ...

  10. iOS开发-NSLog不打印设置 Prefix

    首先在-Prefix.pch,文件里添加如下代码 #ifdef DEBUG #define NSLog(...) NSLog(__VA_ARGS__) #define debugMethod() NS ...