URAL 1287 Mars Canals

URAL 1287

思路:dp水题,四个方向转移,题目卡了内存,应该只能这么写。

代码:

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define mem(a,b) memset(a,b,sizeof(a))

const int N=1405;
char mp[N][N];
int dp[N][N][2][4];
int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    int n;
    cin>>n;
    for(int i=1;i<=n;i++)cin>>(mp[i]+1);
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            if(mp[i][j]=='s'){
                dp[i][j][0][0]=dp[i-1][j-1][0][0]+1;
                dp[i][j][0][1]=dp[i-1][j][0][1]+1;
                dp[i][j][0][2]=dp[i][j-1][0][2]+1;
                dp[i][j][0][3]=dp[i-1][j+1][0][3]+1;
            }
            else{
                dp[i][j][1][0]=dp[i-1][j-1][1][0]+1;
                dp[i][j][1][1]=dp[i-1][j][1][1]+1;
                dp[i][j][1][2]=dp[i][j-1][1][2]+1;
                dp[i][j][1][3]=dp[i-1][j+1][1][3]+1;
            }
        }
    }
    int ans=0,_ans=0;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            ans=max(ans,dp[i][j][0][0]);
            ans=max(ans,dp[i][j][0][1]);
            ans=max(ans,dp[i][j][0][2]);
            ans=max(ans,dp[i][j][0][3]);
            _ans=max(_ans,dp[i][j][1][0]);
            _ans=max(_ans,dp[i][j][1][1]);
            _ans=max(_ans,dp[i][j][1][2]);
            _ans=max(_ans,dp[i][j][1][3]);
        }
    }
    if(ans>_ans)cout<<'s'<<endl<<ans<<endl;
    else if(ans<_ans)cout<<'S'<<endl<<_ans<<endl;
    else cout<<'?'<<endl<<ans<<endl;
    return 0;
}

 

posted @ 2018-01-31 13:44  Wisdom+.+  阅读(187)  评论(0编辑  收藏  举报