洛谷P14341 滑雪

来源:互联网 发布:sql重庆培训 编辑:程序博客网 时间:2024/05/17 04:12

好怀念。。第一道自己AC的DP

记忆化搜索

(好久以前写的有点难看见谅233

<span style="font-size:18px;">#include<iostream>#include<cstring>#define maxn 1005using namespace std;int m,n,G[maxn][maxn],dp[maxn][maxn];bool vis[maxn][maxn];const int mx[4]={1,-1,0,0};const int my[4]={0,0,1,-1};void init(void){    cin>>m>>n;    for(int i=0;i<maxn;i++)        for(int j=0;j<maxn;j++)            G[i][j]=maxn;    for(int i=1;i<=m;i++)        for(int j=1;j<=n;j++){            int x;cin>>x;            G[i][j]=x;        }    memset(dp,0,sizeof(dp));    memset(vis,0,sizeof(vis));}int solve(int x,int y){    int t=0;vis[x][y]=1;int mark=1;    for(int i=0;i<4;i++){        int tx=x+mx[i],ty=y+my[i];        if(G[tx][ty]<G[x][y]){            mark=0;            if(vis[tx][ty])t=max(dp[tx][ty]+1,t);            else{                solve(tx,ty);                t=max(dp[tx][ty]+1,t);            }        }    }    if(!mark)dp[x][y]=t;    else dp[x][y]=1;    return dp[x][y];}int main(){    init();    int ans=0;    for(int i=1;i<=m;i++){        for(int j=1;j<=n;j++){            if(!vis[i][j]){                solve(i,j);                if(ans<dp[i][j])                    ans=dp[i][j];            }        }    }    cout<<ans;    return 0;}</span>


0 0