URAL 1287 Mars Canals
思路: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; }