博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
滑雪 (记忆化搜索)
阅读量:4705 次
发布时间:2019-06-10

本文共 1215 字,大约阅读时间需要 4 分钟。

【题目描述】

    滑坡的长度由滑过点的个数来计算,区域由一个二维数组给出,数组的每个数字代表点的高度。下面是一个例子:

                  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-24-17-16-1(从25开始到1结束),当然25-24……2-1更长,事实上这是最长的一条。

【题目链接】

    http://ybt.ssoier.cn:8088/problem_show.php?pid=1280

【算法】

    记忆化搜索避免排序。

【代码】

1 #include 
2 using namespace std; 3 int r,c,i,j,ans; 4 int dp[110][110],a[110][110]; 5 const int dx[]={-1,0,1,0},dy[]={
0,1,0,-1}; 6 int solve(int x,int y) 7 { 8 if(dp[x][y]) return dp[x][y]; 9 int ret=1;10 for(int k=0;k<4;k++) {11 int nx=x+dx[k],ny=y+dy[k];12 if(nx>0&&nx<=r&&ny>0&&ny<=c&&a[nx][ny]>a[x][y])13 ret=max(ret,solve(nx,ny)+1);14 }15 dp[x][y]=ret;16 return ret;17 }18 int main()19 {20 scanf("%d%d",&r,&c);21 for(i=1;i<=r;i++)22 for(j=1;j<=c;j++)23 scanf("%d",&a[i][j]);24 for(i=1;i<=r;i++)25 for(j=1;j<=c;j++) {26 if(!dp[i][j]) solve(i,j);27 ans=max(ans,dp[i][j]);28 }29 printf("%d\n",ans);30 return 0;31 }

 

转载于:https://www.cnblogs.com/Willendless/p/9389598.html

你可能感兴趣的文章
为什么wait()和notify()属于Object类
查看>>
配置NRPE的通讯
查看>>
匹配两个空格之间的字符。。。
查看>>
CSS 文字溢出 变成省略号 ...
查看>>
Spring事务
查看>>
java编程基础(三)流程控制语句
查看>>
让数据库跑的更快的7个MySQL优化建议
查看>>
jquery 取id模糊查询
查看>>
解决在vue中,自用mask模态框出来后,下层的元素依旧可以滑动的问题
查看>>
PAT(B) 1014 福尔摩斯的约会(Java)
查看>>
PAT甲级题解-1123. Is It a Complete AVL Tree (30)-AVL树+满二叉树
查看>>
项目开发总结报告(GB8567——88)
查看>>
SSH加固
查看>>
端口扫描base
查看>>
iOS IM开发的一些开源、框架和教程等资料
查看>>
FansUnion:共同写博客计划终究还是“流产”了
查看>>
python 二维字典
查看>>
Arrays类学习笔记
查看>>
实验吧之【天下武功唯快不破】
查看>>
2019-3-25多线程的同步与互斥(互斥锁、条件变量、读写锁、自旋锁、信号量)...
查看>>