3.滑雪-深搜&dp
//Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激。可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。Michael想知道载一个区域中最长底滑坡。区域由一个二维数组给出。数组的每个数字代表点的高度。下面是一个例子
// 1 2 3 4 5
//16 17 18 19 6
//15 24 25 20 7
//14 23 22 21 8
//13 12 11 10 9
//一个人可以从某个点滑向上下左右相邻四个点之一,当且仅当高度减小。在上面的例子中,一条可滑行的滑坡为24-17-16-1。当然25-24-23-...-3-2-1更长。事实上,这是最长的一条。
//
//输入描述
//
//输入的第一行表示区域的行数R和列数C(1<=R,C<=100)。下面是R行,每行有C个整数,代表高度h,0<=h<=10000。
//
//
//输出描述
//
//输出最长区域的长度。
//
//
//输入样例
//
//5 5
//1 2 3 4 5
//16 17 18 19 6
//15 24 25 20 7
//14 23 22 21 8
//13 12 11 10 9
//
//
//输出样例
//
//25
#include <iostream>
using namespace std;
int m, n;
int a[105][105]; //符合题意即可,不要太大,否则耗时太多
int dp[105][105];
int count = 0;
int valid(int x, int y){
return (x >= 0 && x <= m && y >= 0 && y <= n);
}
int dfs(int x, int y){
if(dp[x][y] != -1) //不为-1表示已经搜索过,直接取,避免重复搜索耗时
return dp[x][y];
int all = 0;
if(valid(x, y) && a[x][y] >= a[x - 1][y])
all = max(all, 1 + dfs(x-1, y));
if(valid(x, y) && a[x][y] >= a[x + 1][y])
all = max(all, 1 + dfs(x + 1, y));
if(valid(x, y) && a[x][y] >= a[x][y - 1])
all = max(all, 1 + dfs(x, y - 1));
if(valid(x, y) && a[x][y] >= a[x][y + 1])
all = max(all, 1 + dfs(x, y + 1));
if(all == 0)
return 1;
else{
return all;
}
}
int main(){
int max = 0;
cin >> m >> n;
for(int i = 0; i < m; i++)
for(int j = 0; j < n; j++){
cin >> a[i][j];
dp[i][j] = -1; //初始化为-1
}
for(int i = 0; i < m; i++)
for(int j = 0; j < n; j++){
// max = dfs(i, j);
if(max < dfs(i, j))
max = dfs(i, j);
}
cout << max;
return 0;
}
#include <iostream>
#include <cstring>
using namespace std;
int dp[104][104];
int a[104][104];
int r, c;
int dx[4] = {0, 0, -1, 1};
int dy[4] = {1, -1, 0, 0}; int longest(int i, int j){
if(dp[i][j]){
return dp[i][j];
}
int m = 0, ri, rj;
for(int k = 0; k < 4; k++){
ri = i + dx[k];
rj = j + dy[k];
if(ri >= 0 && ri < r && rj >= 0 && rj < c && a[ri][rj] > a[i][j]){
if(m < longest(ri, rj))
m = longest(ri, rj);
}
}
return dp[i][j] = m + 1;
} int main(){
int t;
cin >> t;
while(t--){
// int r, c;
memset(dp, 0, sizeof(dp));
cin >> r >> c;
for(int i = 0; i < r; i++){
for(int j = 0; j < c; j++)
cin >> a[i][j];
}
int ma = 0, ret;
for(int i = 0; i < r; i++){
for(int j = 0; j < c; j++){
ret = longest(i, j);
if(ma < ret)
ma = ret;
}
}
cout << ma << endl;
} return 0;
}
3.滑雪-深搜&dp的更多相关文章
- 深搜+DP剪枝 codevs 1047 邮票面值设计
codevs 1047 邮票面值设计 1999年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description ...
- 【Luogu】P3387缩点(Tarjan缩点+深搜DP)
题没什么好说的,因为是模板题.求值我用的是dfs. 不能直接在原图上dfs,因为原图上有环的话会发生一些滑稽的事情.所以我们要用Tarjan缩点.因为此题点权全为正,所以如果在图上走一个环当然可以全走 ...
- P2668 斗地主 dp+深搜版
题目描述 牛牛最近迷上了一种叫斗地主的扑克游戏.斗地主是一种使用黑桃.红心.梅花.方片的A到K加上大小王的共54张牌来进行的扑克牌游戏.在斗地主中,牌的大小关系根据牌的数码表示如下:3<4< ...
- 方格取数(多线程dp,深搜)
https://www.luogu.org/problem/P1004 题目描述 设有N×N的方格图(N≤9),我们将其中的某些方格中填入正整数,而其他的方格中则放入数字0.如下图所示(见样例): 某 ...
- 洛谷 P2392 kkksc03考前临时抱佛脚, dp / 深搜
题目链接 P2392 kkksc03考前临时抱佛脚 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题目 dp代码 #include <iostream> #includ ...
- POJ_1088 滑雪(记忆型DP+DFS)
Description Michael喜欢滑雪,这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道 ...
- NYOJ 10 skiing (深搜和动归)
skiing 时间限制:3000 ms | 内存限制:65535 KB 难度:5 描写叙述 Michael喜欢滑雪百这并不奇怪. 由于滑雪的确非常刺激.但是为了获得速度.滑的区域必须向下倾斜.并且 ...
- HDU 4597 Play Game(记忆化搜索,深搜)
题目 //传说中的记忆化搜索,好吧,就是用深搜//多做题吧,,这个解法是搜来的,蛮好理解的 //题目大意:给出两堆牌,只能从最上和最下取,然后两个人轮流取,都按照自己最优的策略,//问说第一个人对多的 ...
- ZOJ(ZJU) 1002 Fire Net(深搜)
Suppose that we have a square city with straight streets. A map of a city is a square board with n r ...
随机推荐
- 自己写的jQuery浮动广告插件
效果图: 文件位置摆放: 插件的js代码: $.extend({ pfAdv:function(options){ var defaults={ count:1, startTop:200, star ...
- 【Python编程:从入门到实践】chapter3 列表简介
chapter3 列表简介3.1 列表是什么 列表是一系列按特定顺序排列的元素组成. bicycle = ['trek','cannondale'] print bicycle 3.1.1 访问列表元 ...
- System Error:/usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found
System Error:/usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found 1.运行程序是,系统报错库文件libstdc++. ...
- Javascript,获取元素,write方法
一:Javascript:弱类型脚本语言,是一种动态类型.实现部分动画效果和用户交互等 -- html是骨架(页面结构) css样式 js是行为 -- 弱类型体现: JS代码可以写在body,he ...
- 如何使用change命令改变密码的属性
使用chage更改用户密码密码使用情况 -d //设置最近一次更改密码时间, 0下次登陆系统强制修改密码 -m //设置用户两次改变密码之间使用"最小天数" -M //设置用户两次 ...
- CentOS 7.4 安装部署 iRedMail 邮件服务器
在公司部署了一套开源的邮件网关Scrollout F1用来测试,由于Scrollout F1需要使用IMAP协议连接到邮件服务器上的隔离邮箱,抓取GOOD和BAD文件夹里的邮件进行贝叶斯学习,但公司的 ...
- angular 使用服务共享数据需要注意
在使用服务共享数据时,需要注意一些细节,否则会出现视图不刷新,也不报错这样的问题,遇到了,总结下 如下: <div ng-controller='ctr1'> <a href={{n ...
- UI5-文档-4.26-(Optional) Remote OData Service
到目前为止,我们已经使用了本地JSON数据,但是现在我们将访问一个真正的OData服务来可视化远程数据. 用可公开获得的Northwind OData服务显示并替换发票模型的JSONModel类型,以 ...
- 常用HTTP状态码
1.常用状态码介绍 在http响应协议中,我们通过HttpWatch抓包抓取到响应信息.其中响应首行中就包含一个状态码.状态码由三位数字组成,表示请求是否被理解或者被满足.HTTP响应状态码的第一个数 ...
- jstl fmt
1)导入jstl 包,加载ftm标签 首先将jstl的jar包放入类库中,使用1.2版本 其次在jsp文件中引入所需要的 标记库,对于 ftm 标签,如下: <%@ taglib prefix= ...