BZOJ-3208|记忆化搜索-花神的秒题计划Ⅰ
背景【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输出单独一行的回答
Sample Input 1
5
1 2 3 4 5
10 9 8 7 6
11 12 13 14 15
20 19 18 17 16
21 22 23 24 25
5
C 1 1 3
Q
S 1 3 5 5
S 3 1 5 5
Q
Sample Output 1
24
3
样例解释:
第一个Q路线为:25->24->23->22….->3->2
第二个Q的路线为:10->9->2
记忆化搜索
AC代码
#include<bits/stdc++.h>
using namespace std;
/*
std::ios_base::sync_with_stdio;也超时
*/
const int inf = 0x3f3f3f3f;
const int maxn = 1010;
int n;
int f[maxn][maxn];
int g[maxn][maxn];
int vis[maxn][maxn];
int dr[4][2] = {{0,1},{1,0},{-1,0},{0,-1}};
bool in(int x,int y){
return x>0 && x<=n && y>0 && y<=n;
}
//f[x][y]含义:从这个点出发 所能走的最大长度
int dfs(int x,int y){
if(vis[x][y]) return -inf;
if(f[x][y]) return f[x][y]; //取
int res = 1;//第一次搜索这个点
for(int i=0;i<4;i++){
int tx = x + dr[i][0];
int ty = y + dr[i][1];
if(in(tx,ty) && g[tx][ty] < g[x][y]){
res = max(res,dfs(tx,ty)+1);
}
}
return f[x][y] = res; //存
}
int main(){
std::ios_base::sync_with_stdio;
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>g[i][j];
}
}
int m;
cin>>m;
while(m--){
char ch;
int a,b,c,d;
cin>>ch;
if(ch=='S'){
cin>>a>>b>>c>>d;
for(int i=a;i<=c;i++){
for(int j=b;j<=d;j++){
vis[i][j] = 1;
}
}
}else if(ch=='B'){
cin>>a>>b>>c>>d;
for(int i=a;i<=c;i++){
for(int j=b;j<=d;j++){
vis[i][j] = 0;
}
}
}else if(ch=='C'){
cin>>a>>b>>c;
g[a][b] = c;
}else{
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));
}
}
cout<<ans<<endl;
}
}
return 0;
}
BZOJ-3208|记忆化搜索-花神的秒题计划Ⅰ的更多相关文章
- bzoj 3208 花神的秒题计划I
bzoj 3208 花神的秒题计划I Description 背景[backboard]: Memphis等一群蒟蒻出题中,花神凑过来秒题-- 描述[discribe]: 花花山峰峦起伏,峰顶常年被雪 ...
- bzoj3208: 花神的秒题计划Ⅰ
3208: 花神的秒题计划Ⅰ Time Limit: 16 Sec Memory Limit: 128 MBSubmit: 323 Solved: 211[Submit][Status] Desc ...
- 2017广东工业大学程序设计竞赛决赛 题解&源码(A,数学解方程,B,贪心博弈,C,递归,D,水,E,贪心,面试题,F,贪心,枚举,LCA,G,dp,记忆化搜索,H,思维题)
心得: 这比赛真的是不要不要的,pending了一下午,也不知道对错,直接做过去就是了,也没有管太多! Problem A: 两只老虎 Description 来,我们先来放松下,听听儿歌,一起“唱” ...
- NOIP 2017 逛公园 记忆化搜索 最短路 好题
题目描述: 策策同学特别喜欢逛公园.公园可以看成一张N个点MM条边构成的有向图,且没有 自环和重边.其中1号点是公园的入口,N号点是公园的出口,每条边有一个非负权值, 代表策策经过这条边所要花的时间. ...
- bzoj3208:花神的秒题计划I
思路:因为Q.S.B操作总和不超过100,因此怎么暴力怎么写....当然记忆化搜索还是要的 #include<cstdio> #include<iostream> #inclu ...
- 【bzoj3208】花神的秒题计划Ⅰ
记忆化搜索 #include<algorithm> #include<iostream> #include<cstring> #include<cstdlib ...
- BZOJ3208:花神的秒题计划Ⅰ(记忆化搜索DP)
Description 背景[backboard]: Memphis等一群蒟蒻出题中,花神凑过来秒题…… 描述[discribe]: 花花山峰峦起伏,峰顶常年被雪,Memphis打算帮花花山风景区 ...
- 【记忆化搜索】bzoj3208 花神的秒题计划Ⅰ
暴力 #include<cstdio> #include<cstring> #include<algorithm> using namespace std; #de ...
- BZOJ 3208: 花神的秒题计划Ⅰ
这就是一道滑雪嘛= = 所有操作都爆力,求路径就dp,完了 CODE: #include<cstdio>#include<iostream>#include<algori ...
随机推荐
- 关于VMware(虚拟机) 出现错误时处理办法
我们在开发中难免会用到虚拟机.前段时间老有同学问我虚拟机报错解决办法,趁今天有空特随笔. 错误如下图 首先科普下VT是个啥? Intel VirtualTechnology(VT)既“虚拟化技术” V ...
- PL_SQL学习
打印输出: dbms_output.put_line('AA'); 显示服务器输出信息 set serveroutput on; 打印出eid=1的员工姓名: declare v_name varc ...
- 获取Button脚本挂载的事件名
(function(){ var Super = function(){}; Super.prototype = cc.Button.prototype; //实例化原型 Super.prototyp ...
- 全志A33驱动GT911触摸屏
0x00 环境说明: 所使用的开发板为锐尔威视的插针版A33_Vstar 触摸屏驱动IC为GT911 接线参照开发板的TP线路 0x01 修改系统配置文件: 笔者所使用的A33开发板的系统配置文件路径 ...
- php实现栈操作(不用push pop 库函数)
直接上代码 <?php /*php不用库函数实现栈操作 * @author Geyaru 2019-04-20 */ class stack{ private $top = -1; //栈指针初 ...
- 安装eclipse scala插件
1.安装eclipse插件,依次点击Help->Eclipse Marketplace 2.输入scala,点击go,进行搜索 3,出现了Scala IDE4.7X,点击右下方的Install进 ...
- JS对象、构造器函数和原型对象之间的关系
一.基本概念 1.对象:属性和方法的集合,即变量和函数的封装.每个对象都有一个__proto__属性,指向这个对象的构造函数的原型对象. 2.构造器函数:用于创建对象的函数,通过new关键字生成对象. ...
- 使用JavaScript实现单向链表
一.实现功能 1.链表元素头部插入 this.unShift = function(data) {} 2.链表元素尾部插入 this.append= function(data) {} //返回boo ...
- CentOS7 配置Mailx使用SMTP发送邮件
mail.mailx和sendmail介绍: mail是mailx的别名,最初叫nail(与arch linux目前用的S-nail基因相同):mail是Heirloom的一个子项目.sendmail ...
- Linq基础+Lambda表达式对数据库的增删改及简单查询
一.Linq to sql 类 高集成化的数据库访问技术 使用Linq可以代替之前的Ado.Net,省去了自己敲代码的实体类和数据访问类的大量工作 实体类: 添加一个Linq to sql 类 --- ...