zoukankan      html  css  js  c++  java
  • Codeforces 374C

    374C - Inna and Dima

    思路:dfs+记忆化搜索

    代码:

    #include<bits/stdc++.h>
    using namespace std;
    #define ll unsigned long long 
    #define pb push_back
    #define mem(a,b) memset(a,b,sizeof(a))
    
    const int INF=0x3f3f3f3f;
    char mp[1005][1005];
    bool vis[1005][1005];
    int  dp[1005][1005];
    int dir[4][2]={0,1,1,0,0,-1,-1,0};
    int n,m;
    int dfs(int x,int y){
        if(dp[x][y]!=-1)return dp[x][y];
        dp[x][y]=0;//当前路径染色,方便判环
        int ans=0;
        bool f=false;
        for(int i=0;i<4;i++){
            int tx=x+dir[i][0];
            int ty=y+dir[i][1];
            if(x<1||x>n||y<1||y>m)continue;
            if(mp[x][y]=='D'&&mp[tx][ty]=='I'){
                if(dp[tx][ty]==0)return INF;
                ans=max(ans,1+dfs(tx,ty));
                f=true;
            }
            if(mp[x][y]=='I'&&mp[tx][ty]=='M'){
                if(dp[tx][ty]==0)return INF;
                ans=max(ans,1+dfs(tx,ty));
                f=true;
            }
            if(mp[x][y]=='M'&&mp[tx][ty]=='A'){
                if(dp[tx][ty]==0)return INF;
                ans=max(ans,1+dfs(tx,ty));    
                f=true;
            }
            if(mp[x][y]=='A'&&mp[tx][ty]=='D'){
                if(dp[tx][ty]==0)return INF;
                ans=max(ans,1+dfs(tx,ty));
                f=true;
            }
        }
        if(!f)return dp[x][y]=1;
        else return dp[x][y]=ans;
    }
    int main(){
        ios::sync_with_stdio(false);
        cin.tie(0);
        cin>>n>>m;
        for(int i=1;i<=n;i++){
            cin>>(mp[i]+1); 
        } 
        mem(dp,-1);
        int ANS=0;
        for(int i=1;i<=n;i++){
            for(int j=1;j<=m;j++){
                if(mp[i][j]=='D'){
                    ANS=max(ANS,dfs(i,j));
                }
            }
        }
        //cout<<ANS<<endl;
        if(ANS>=INF)cout<<"Poor Inna!"<<endl;
        else{
            if(ANS/4==0)cout<<"Poor Dima!"<<endl;
            else cout<<ANS/4<<endl;
        } 
        return 0;
    } 
  • 相关阅读:
    hdu 2065
    hdu 1999
    hdu 1562
    hdu 1728
    hdu 1180
    hdu 1088
    hdu 2133
    很好的例子。。
    putty 多标签式浏览
    df
  • 原文地址:https://www.cnblogs.com/widsom/p/8423729.html
Copyright © 2011-2022 走看看