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输出单独一行的回答

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

代码如下

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; static const int maxm=2e3+10;
static const int INF=~(1<<31); int hgt[maxm][maxm],f[maxm][maxm],cant[maxm][maxm];
int dx[]={1,0,-1,0};
int dy[]={0,1,0,-1};
char ch[10];
int n,m; void mark(int x1,int y1,int x2,int y2,bool f){
for(int i=x1;i<=x2;i++)
for(int j=y1;j<=y2;j++)
cant[i][j]=f;
} int dfs(int x,int y){
if(cant[x][y])return -INF;
if(f[x][y])return f[x][y];
f[x][y]=1;
for(int i=0;i<=3;i++){
int xx=x+dx[i];
int yy=y+dy[i];
if(xx<1||xx>n||yy<1||yy>n)continue;
if(hgt[xx][yy]>hgt[x][y])f[x][y]=max(f[x][y],dfs(xx,yy)+1);
}
return f[x][y];
} void change(int x,int y,int h){
hgt[x][y]=h;
} int main(){
int x1,x2,y1,y2,x,y,c;
scanf("%d",&n);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
scanf("%d",&hgt[i][j]);
scanf("%d",&m); while(m--){
scanf("%s",ch);
if(ch[0]=='C')scanf("%d%d%d",&x,&y,&c),change(x,y,c);
else if(ch[0]=='S')scanf("%d%d%d%d",&x1,&y1,&x2,&y2),mark(x1,y1,x2,y2,1);
else if(ch[0]=='B')scanf("%d%d%d%d",&x1,&y1,&x2,&y2),mark(x1,y1,x2,y2,0);
else if(ch[0]=='Q'){
int ans=0;
memset(f,0,sizeof f);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
ans=max(ans,dfs(i,j));
printf("%d\n",ans);
}
} return 0;
}

点我进入AC通道

最新文章

  1. OpenCV2.4.13+VS2013开发环境配置
  2. log4net不同logger输出日志
  3. 【iCore3 双核心板】例程十一:DMA实验——存储器到存储器的传输
  4. 信息安全系统设计基础实验一:Linux开发环境的配置和使用(20135234,20135229)
  5. How To PLAY_SOUND in Oracle Forms
  6. 快速对字符转义,避免跨站攻击XSS
  7. redis使用
  8. 出色的 JavaScript API 设计秘诀
  9. [Everyday Mathematics]20150110
  10. 什么是UML类图
  11. Flask中endpoint的理解
  12. Linux 下的 fork()【转载】
  13. 全栈JavaScript之路(十七)HTML5 新增字符集属性
  14. uva10976
  15. HDU 4787 GRE Words Revenge
  16. XBee PRO 900HP远距离无线模块
  17. jstack生成的Thread Dump日志线程 分析
  18. 获取table行列
  19. Docker镜像构建上下文(Context)
  20. http协议中的一些小常识

热门文章

  1. java基础—java读取properties文件
  2. 【原】基于matlab的蓝色车牌定位与识别---绪论
  3. 【SAM】bzoj5084: hashit
  4. Git下的gitignore规则介绍
  5. 【Spring】事务的实现方式
  6. Vue表单输入绑定
  7. lavarel 添加自定义辅助函数
  8. 图解Disruptor框架(一):初识Ringbuffer
  9. 《linux设备驱动开发详解》笔记——10中断与时钟
  10. STM32——PWM基本知识及配置过程