dp专题 第二十六题 滑雪

来源:互联网 发布:宁波浙大软件学院 编辑:程序博客网 时间:2024/05/07 00:53

1、简单描述

输入c*r的矩阵,元素表示山头的高度,求最长滑雪的区域长度。

2、思路

#include <bits/stdc++.h>



using namespace std;


int dx[]={-1,0,1,0};
int dy[]={0,1,0,-1};
int r,c;
int opt[101][101];
int node[101][101];


bool ok(int i,int j)
{
    return (i>=1&&i<=r&&j>=1&&j<=c);
}                                                                                        //判断是否越界
int dp(int i,int j)
{
    int k;
    if(opt[i][j]>0) return opt[i][j];
    for(k=0;k<4;k++)
    {
        if(ok(i+dx[k],j+dy[k]))
            if(node[i+dx[k]][j+dy[k]]<node[i][j])
        {
            if(opt[i][j]<dp(i+dx[k],j+dy[k])+1)
                opt[i][j]=dp(i+dx[k],j+dy[k])+1;
        }
    }
    return opt[i][j];                                                              //计算区域长度
}
int main()
{
    
    while(cin>>r>>c)
    {
        
    int Max=-1;
    for(int i=1;i<=r;i++)
        for(int j=1;j<=c;j++)
    {
        cin>>node[i][j];
    }
    for(int i=1;i<=r;i++)
        for(int j=1;j<=c;j++)
    {
        int t = dp(i,j);
        if(Max<t)
            Max=t;
    }                                                              //输出最长区域长度
    cout<<Max+1<<endl;
    }
    return 0;


}

多次输入测试数据。

上下左右四个方向查找。

0 0
原创粉丝点击