#include <iostream>
#include <vector>
typedef std::pair<int, int> int_pair;
typedef std::vector< std::vector<int> > int_matrix;
void traceback (int row, int col, std::vector<int_pair>& base_pairs, int_matrix& dp_matrix ){
// bounds checking?
if(dp_matrix[row+1][col-1] == dp_matrix[row][col]){
int_pair base_pair = {row,col};
base_pairs.push_back(base_pair);
traceback(row+1, col-1, base_pairs, dp_matrix);
return;
}
}
int main() {
int_matrix dp_matrix{{4,3,2,1},
{3,2,1,1},
{2,1,2,3},
{0,2,3,4}};
std::vector<int_pair> base_pairs;
traceback(0, 3, base_pairs, dp_matrix);
for (auto& pair : base_pairs)
std::cout << pair.first << "," << pair.second << std::endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgoKdHlwZWRlZiBzdGQ6OnBhaXI8aW50LCBpbnQ+IGludF9wYWlyOwp0eXBlZGVmIHN0ZDo6dmVjdG9yPCBzdGQ6OnZlY3RvcjxpbnQ+ID4gaW50X21hdHJpeDsKCnZvaWQgdHJhY2ViYWNrIChpbnQgcm93LCBpbnQgY29sLCBzdGQ6OnZlY3RvcjxpbnRfcGFpcj4mIGJhc2VfcGFpcnMsIGludF9tYXRyaXgmIGRwX21hdHJpeCApewogIC8vIGJvdW5kcyBjaGVja2luZz8KICAKICBpZihkcF9tYXRyaXhbcm93KzFdW2NvbC0xXSA9PSBkcF9tYXRyaXhbcm93XVtjb2xdKXsKICAgIGludF9wYWlyIGJhc2VfcGFpciA9IHtyb3csY29sfTsKICAgIGJhc2VfcGFpcnMucHVzaF9iYWNrKGJhc2VfcGFpcik7CiAgICB0cmFjZWJhY2socm93KzEsIGNvbC0xLCBiYXNlX3BhaXJzLCBkcF9tYXRyaXgpOwogICAgcmV0dXJuOwogIH0KfQoKaW50IG1haW4oKSB7CiAgaW50X21hdHJpeCBkcF9tYXRyaXh7ezQsMywyLDF9LAogICAgICAgICAgICAgICAgICAgICAgIHszLDIsMSwxfSwKICAgICAgICAgICAgICAgICAgICAgICB7MiwxLDIsM30sCiAgICAgICAgICAgICAgICAgICAgICAgezAsMiwzLDR9fTsKICBzdGQ6OnZlY3RvcjxpbnRfcGFpcj4gYmFzZV9wYWlyczsKICB0cmFjZWJhY2soMCwgMywgYmFzZV9wYWlycywgZHBfbWF0cml4KTsKICBmb3IgKGF1dG8mIHBhaXIgOiBiYXNlX3BhaXJzKQogICAgc3RkOjpjb3V0IDw8IHBhaXIuZmlyc3QgPDwgIiwiIDw8IHBhaXIuc2Vjb25kIDw8IHN0ZDo6ZW5kbDsKfQ==