搜索学习(1)--POJ 1088滑雪 NYOJ 10

2024-08-27 03:08
文章标签 poj 1088 nyoj 滑雪 搜索 学习

本文主要是介绍搜索学习(1)--POJ 1088滑雪 NYOJ 10,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目链接:

  poj:click here.

  NYOJ :click here

搜索的经典,记忆化搜索,可以用dp实现,

思路:做了一天了,关键在于记录路径的二维数组和存储图的数组,当前点四个方向都搜一遍,搜了一遍记录被访问了,高度下降才是符合要求,同时最长路径在搜的同时及时更新, 调了好几遍,搜索题目还是发现没能把图抽象化语言去实现,以后要加强,不过发现nyoj能过,同样的代码交到poj就TE了,看了一下测试数据,应该是poj的有点水了,不过数的范围大。

参考代码:

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
int n,m,ans,Max;
int line[110][110],val[110][110];//记录路径的二维数组和存储图的数组
bool vis[110][110];
int dx[4]= {-1,1,0,0},dy[4]= {0,0,-1,1};
void dfs(int x,int y,int num)
{ans=ans<num?num:ans;for(int i=0;i<4;i++){int sx=x+dx[i];int sy=y+dy[i];if(sx<0||sy<0||sx>=n||sy>=m||vis[sx][sy]||val[x][y]<=val[sx][sy])continue ;vis[sx][sy]=true ;if(line[sx][sy])//如果当前点经过路径大于零{ans= ans<line[sx][sy]+num ? line[sx][sy]+num : ans ;vis[sx][sy]=false ; //continue ;}dfs(sx,sy,num+1);vis[sx][sy]=false;}
}
int main()
{//freopen("1.txt","r",stdin);//freopen("2.txt","w",stdout);int i,j,T ;scanf("%d",&T);while(T--){scanf("%d%d",&n,&m);for(i=0 ; i<n ; i++)for(j=0 ; j<m ; j++)scanf("%d",&val[i][j]);memset(line,0,sizeof(line));                 //开始所有点的距离都为0Max=0;for(i=0;i<n;i++)for(j=0;j<m;j++){ans=1;                        //最小距离赋为1memset(vis,false,sizeof(vis));//全部未访问vis[i][j]=true;               //搜一次访问一次dfs(i,j,1);                   //开始搜索line[i][j]=ans;                  //更新路径Max=Max<line[i][j]?line[i][j]:Max;}printf("%d\n",Max) ;}return 0 ;
}


这篇关于搜索学习(1)--POJ 1088滑雪 NYOJ 10的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1110459

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

认识、理解、分类——acm之搜索

普通搜索方法有两种:1、广度优先搜索;2、深度优先搜索; 更多搜索方法: 3、双向广度优先搜索; 4、启发式搜索(包括A*算法等); 搜索通常会用到的知识点:状态压缩(位压缩,利用hash思想压缩)。

hdu1240、hdu1253(三维搜索题)

1、从后往前输入,(x,y,z); 2、从下往上输入,(y , z, x); 3、从左往右输入,(z,x,y); hdu1240代码如下: #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#inc

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

poj 3974 and hdu 3068 最长回文串的O(n)解法(Manacher算法)

求一段字符串中的最长回文串。 因为数据量比较大,用原来的O(n^2)会爆。 小白上的O(n^2)解法代码:TLE啦~ #include<stdio.h>#include<string.h>const int Maxn = 1000000;char s[Maxn];int main(){char e[] = {"END"};while(scanf("%s", s) != EO

hdu 2602 and poj 3624(01背包)

01背包的模板题。 hdu2602代码: #include<stdio.h>#include<string.h>const int MaxN = 1001;int max(int a, int b){return a > b ? a : b;}int w[MaxN];int v[MaxN];int dp[MaxN];int main(){int T;int N, V;s

poj 1511 Invitation Cards(spfa最短路)

题意是给你点与点之间的距离,求来回到点1的最短路中的边权和。 因为边很大,不能用原来的dijkstra什么的,所以用spfa来做。并且注意要用long long int 来存储。 稍微改了一下学长的模板。 stack stl 实现代码: #include<stdio.h>#include<stack>using namespace std;const int M