Untitled
unknown
c_cpp
4 years ago
1.2 kB
6
Indexable
#include<bits/stdc++.h>
using namespace std;
vector<string> grid;
vector<vector<int>> dp;
int h,w;
int dfs(int i,int j,char ch){
if(i>=h or i<0 or j>=w or j<0)
return 0;
if(ch == ('Z' + 1))
return 0;
if(grid[i][j] != ch )
return 0;
if(dp[i][j] != -1)
return dp[i][j];
int ans = 0;
ch++;
ans = max(dfs(i+1,j,ch),dfs(i,j+1,ch));
ans = max(ans,dfs(i-1,j,ch));
ans = max(ans,dfs(i,j-1,ch));
ans = max(ans,dfs(i+1,j+1,ch));
ans = max(ans,dfs(i-1,j-1,ch));
ans = max(ans,dfs(i-1,j+1,ch));
ans = max(ans,dfs(i+1,j-1,ch));
ans += 1;
dp[i][j] = ans;
return ans;
}
bool solve(int n){
cin>>h>>w;
if(h==0 and w==0)
return false;
grid.resize(h);
dp.resize(h);
for(int i=0;i<h;i++){
cin>>grid[i];
dp[i].resize(w);
}
for(int i=0;i<h;i++){
for(int j=0;j<w;j++)
dp[i][j] = -1;
}
int ans = 0;
for(int i=0;i<h;i++){
for(int j=0;j<w;j++){
if(grid[i][j] == 'A')
ans = max(ans,dfs(i,j,'A'));
}
}
cout<<"Case "<<n<<": "<<ans<<endl;
return true;
}
int main() {
// your code goes here
int t;
int num = 1;
while(true){
if(!solve(num))
break;
num++;
}
return 0;
}Editor is loading...