30:滑雪
来源:互联网 发布:js 随机掉落 编辑:程序博客网 时间:2024/05/22 10:43
1 2 3 4 516 17 18 19 615 24 25 20 714 23 22 21 813 12 11 10 9
一个人可以从某个点滑向上下左右相邻四个点之一,当且仅当高度减小。在上面的例子中,一条可滑行的滑坡为24-17-16-1。当然25-24-23-...-3-2-1更长。事实上,这是最长的一条。
5 51 2 3 4 516 17 18 19 615 24 25 20 714 23 22 21 813 12 11 10 9
25题意:
就是每个位置可以从四个方向走,但是必须数是下降的,不然不能走,找出走的最长的距离
分析:
找到四个方向的最大值然后沿着走下去,就是局部最大就是全局最大
代码:
#include<bits/stdc++.h>using namespace std;int a[105][105]={0},n,m,f[105][105]={0},x[4][2]={{0,1},{0,-1},{1,0},{-1,0}};int ok(int k,int l){ if(k>=1&&k<=n&&l>=1&&l<=m) return 1; else return 0;}int sear(int k,int l){ int i,x1,y1; if(f[k][l]) return f[k][l]; f[k][l]=1; for(i=0;i<4;i++) { x1=k+x[i][0]; y1=l+x[i][1]; if(ok(x1,y1)){ if(a[x1][y1]<a[k][l]) f[k][l]=max(sear(x1,y1)+1,f[k][l]); } } return f[k][l];}int main(){ int i,j,maxn; cin>>n>>m; for(i=1;i<=n;i++) for(j=1;j<=m;j++) cin>>a[i][j]; for(i=1,maxn=0;i<=n;i++) for(j=1;j<=m;j++) {f[i][j]=sear(i,j); if(maxn<f[i][j]) maxn=f[i][j]; } cout<<maxn<<endl;}
感受:就是细节处理有问题,耽误了时间
0 0