UVa 10192 - Vacation Solution

#include <iostream>
#include <vector>
#include <string>
using namespace std;
#define max1(a,b) (a>b?a:b)
#define max(a,b,c) (max1(a,max1(b,c)))
string s,t;
vector<vector<int>> dp;
int rec(int i,int j){
    if(i<=0||j<=0)
        return 0;
    if(dp[i][j]>-1)
        return dp[i][j];
    if(s[i-1]==t[j-1])
        return dp[i][j]=1+rec(i-1,j-1);
    return dp[i][j]=max(rec(i-1,j-1),rec(i-1,j),rec(i,j-1));
}
int main(){
    int cs=1;
    while(getline(cin,s)&&getline(cin,t)&&s[0]!='#'){
        dp.assign(s.size()+1,vector<int>(t.size()+1,-1));
        cout<<"Case #"<<cs++<<": you can visit at most "<<rec(s.size(),t.size())<<" cities."<<endl;
    }
}

Comments