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 ...
随机推荐
- Git 查询某次历史提交的修改内容
在工作时,有时候想查看某次的提交修改了哪些的内容. 我们首先可以git log显示历史的提交列表: 之后我们用git show <commit-hashId> 便可以显示某次提交的修改内容 ...
- google浏览器清除缓存
google浏览器设置不缓存的方法 摘要:我们在做web开发的时候特别是在调试js时,会经常使用的google浏览器,这个时候就要我们修改过的代码可能不能生效.这是因为我们的浏览器默认是有缓存的,但是 ...
- Web 项目遇到的乱码问题
问题代码: jsp: <%@ page language="java" contentType="text/html; charset=UTF-8" pa ...
- ExtJS模板与菜单的使用案例-床位卡
ExtJS的模板的使用: 项目中场景基本就是表格模型: TPL:自己编写模板 store:数据源 UI组件: tbar,rbr,bbar实现工具栏 PageBar与StatusBar:可以针对TPL的 ...
- PHP mysqli_free_result()与mysqli_fetch_array()函数
mysql_free_result() 仅需要在考虑到返回很大的结果集时会占用多少内存时调用.在脚本结束后所有关联的内存都会被自动释放. 在我们执行完SELECT语句后,释放游标内存是一个很好的习惯. ...
- RAID5---块,条带,校验,旋转,同步/异
冗余(奇偶校验)块:RAID5中在同一个条带中用一个块来存放冗余信息,冗余信息示其他块的"异或"值,这样在同一条带中就只有(n-1)个块是实际的数据,所以RAID5中阵列容量是(n ...
- 为solr增加用户验证
添加此功能主要是为了增加solr服务器的安全性,不能随便让人访问. 1. 在tomcat的F:\Tomcat 6.0.26_solr\conf\tomcat-users.xml添加用户角色并 ...
- Bogart gGrid.vb
Namespace BogartMis.Cls Public Class gGrid '設定表格控的列標題的別名 '說明:strItem字符串的格式為"01,02,03,04,05" ...
- 网络层-IP地址
以下内容是IPv4 IP地址长度32位,Java里面一个int的长度,总共分为5类IP地址 1:分类编址 A类IP地址0开头: A类有31个位置可以变化,总数是2^31个, [(0 ...
- 31. centos 下修改oracle的编码
[root@localhost ~]# su - oracle[oracle@localhost ~]$ vi /home/oracle/.bash_profile # .bash_profile # ...