#include using namespace std; typedef long long ll; typedef vector> Matrix; struct SubProblem{ int rowCount,colCount; Matrix input; Matrix diagonal; Matrix dp; SubProblem(Matrix const & in):rowCount(in.size()),colCount(in[0].size()),input(in),diagonal(computeDiagonal()),dp(computeDp()){ } Matrix computeDiagonal(){ Matrix result(rowCount,vector(colCount)); for(int diagonal=0;diagonal=rowCount||col>=colCount){ continue; } if(input[row][col]==lastChar){ count++; } else{ count=0; } result[row][col]=count; lastChar=input[row][col]; } } return result; } Matrix computeDp(){ Matrix result(rowCount,vector(colCount)); for(int row=1;row(in.size())); for(int row=0;row>rowCount>>colCount; Matrix input(rowCount,vector(colCount)); for(int i=0;i>S; for(int j=0;j