UVa 10285 Longest Run on a Snowboard Solution

#include <iostream>
#include <vector>
#include <bitset>
#include <queue>
#include <algorithm>
#include <cstdlib>
#include <functional>
#include <string>
using namespace std;
int t,r,c;
string s;
vector<vector<int> > a,dp;
int flood(int i,int j,int k){
    if(i>=r||i<0||j<0||j>=c||a[i][j]>=k)
        return 0;
    if(dp[i][j]!=-1)
        return dp[i][j];
    return dp[i][j]=1+max(flood(i,j+1,a[i][j]),max(flood(i,j-1,a[i][j]),max(flood(i+1,j,a[i][j]),flood(i-1,j,a[i][j]))));
}
int main(){
    cin>>t;
    while(t--){
        cin>>s>>r>>c;
        int mx=0,mi=0,mj=0;
        a.assign(r,vector<int>(c));
        dp.assign(r,vector<int>(c,-1));
        for(int i=0;i<r;i++){
            for(int j=0;j<c;j++){
                cin>>a[i][j];
                if(a[i][j]>mx)
                    mx=a[i][j],mi=i,mj=j;
            }
        }
    int ans=0;
    for(int i=0;i<r;i++)
        for(int j=0;j<c;j++){
            flood(i,j,101);
            ans=max(ans,dp[i][j]);
        }
    cout<<s<<": "<<ans<<endl;
    }
}

Comments