poj 1008 滑雪

来源:互联网 发布:windows 磁贴 编辑:程序博客网 时间:2024/05/22 02:13

开始时认为只要深度收索就行,没想到超时了,后来进行改进,一个点深度收索后就保留记录,下次收索时,如果该点已经收索过的话,就直接用保留的结果了。

#include<iostream>#include<fstream>using namespace std;int m[100][100];int u[100][100];int r,c;bool isIn(int i,int j){    if(i>=0&&i<r&&j>=0&&j<c)        return true;    else        return false;}int dfs(int i,int j,int len){    int len2=len;    int dir[4][2]={{-1,0},{1,0},{0,-1},{0,1}};    for(int k=0;k<4;++k){        if(isIn(i+dir[k][0],j+dir[k][1])){            if(m[i+dir[k][0]][j+dir[k][1]]>m[i][j]){                if(u[i+dir[k][0]][j+dir[k][1]]>0){                    if(len+u[i+dir[k][0]][j+dir[k][1]]>len2)                        len2=len+u[i+dir[k][0]][j+dir[k][1]];                }else{                    int nextlen=dfs(i+dir[k][0],j+dir[k][1],1);                    if(len+nextlen>len2)                        len2=len+nextlen;                }            }        }    }    u[i][j]=len2;    return len2;}int main(){    //ifstream cin("2.txt");    cin>>r>>c;    for(int i=0;i<r;++i)        for(int j=0;j<c;++j)            cin>>m[i][j];    int  maxlen=0;    for(int i=0;i<r;++i)        for(int j=0;j<c;++j){            int len=dfs(i,j,1);            if(len>maxlen)                 maxlen=len;        }    cout<<maxlen<<endl;    return 0;}


0 0
原创粉丝点击