vj1011:记忆化搜索
2024-08-29 21:24:29
vj1011:记忆化搜索
这题就是很简单的记忆化搜索即可,和经典题目滑雪简直一模一样
对于记忆化搜索,我也是暑假看了ccy大神的题解才有所领悟的
其实也就是DFS+mark
主要的部分
int search(int x,int y){
if(f[x][y]>0) return f[x][y];
int ans=0;
int xx,yy;
for(int i=0;i<4;i++){
xx=x+dx[i];
yy=y+dy[i];
if(xx>0 && xx<=n && yy>0 && yy<=m && a[x][y]>a[xx][yy]){
ans=max(ans,search(xx,yy));
}
}
return f[x][y]=ans+1;
}
恩..其实也说不出来记忆化搜索这类题目的技巧吧...多感受
码起来挺简单的:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <queue>
#include <algorithm>
#include <cmath>
using namespace std;
const int dx[5]={0,0,1,-1},dy[5]={1,-1,0,0};
int a[501][501],f[501][501];
int h,n,m,maxn=0,ans;
int max(int a,int b){
return a>b?a:b;
}
int search(int x,int y){
if(f[x][y]>0) return f[x][y];
int ans=0;
int xx,yy;
for(int i=0;i<4;i++){
xx=x+dx[i];
yy=y+dy[i];
if(xx>0 && xx<=n && yy>0 && yy<=m && a[x][y]>a[xx][yy]){
ans=max(ans,search(xx,yy));
}
}
return f[x][y]=ans+1;
}
int main(){
memset(f,-1,sizeof(f));
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++) cin>>a[i][j];
ans=-1;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++){
if(f[i][j]==-1) ans=max(ans,search(i,j));
}
printf("%d\n",ans);
return 0;
}
最新文章
- 全文检索学习历程目录结构(Lucene、ElasticSearch)
- [Beta] postmortem
- 安装SQL SERVER开启SA用户登录的方法
- linux服务方式启动程序脚本(init.d脚本)
- POJ 3630- Phone List(Trie)
- (转载)NET流操作
- jmeter控制器
- 客房收费系统改造(三)—厂+反射+DAL
- SQLite错误总结 error code 19: constraint failed
- smarty的ASSIGN()函数
- hbase 命令
- 新概念英语(1-17)How do you do ?
- 章节十、4-CSS Classes---用多个CSS Classes定位元素
- centos7安装svn
- Orchard详解--第一篇 介绍
- Fatal error: Uncaught Error: Call to undefined function mysqli_connect()
- C#委托防止事件多次注册
- Java NIO系列教程(十二) Java NIO与IO
- 收藏mac重装php环境
- 【MySQL案例】ERROR 1786 (HY000)
热门文章
- ASP.NET Web API中使用OData
- C语言中符号格式说明
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(8)-DbSession线程内唯一
- linux_UBUNTU 12.04 上使用 SQUID 架设HTTP正向代理服务器
- js小记 function 的 length 属性
- nodeJS起步 1
- Android 记录的(MediaRecorder)而播放(MediaPlayer)
- 谈论quick-cocos2d-x和cocos2d-x lua了解差异
- SQL_修改表结构
- 【hoj】2651 pie 二分查找