Problem p03490 (C++)

Buggy submission (status: Runtime Error):
#include "bits/stdc++.h"
using namespace std;

#define DEBUG(x) cout << #x << ": " << x << endl;
#define DEBUG_VEC(v)                                                           \
  cout << #v << ":";                                                           \
  for (int i = 0; i < v.size(); i++)                                           \
    cout << " " << v[i];                                                       \
  cout << endl

typedef long long ll;
#define vi vector<int>
#define vl vector<ll>
#define vii vector<vector<int>>
#define vll vector<vector<ll>>
#define vs vector<string>
#define pii pair<int, int>
#define pis pair<int, string>
#define psi pair<string, int>
#define pll pair<ll, ll>
const int inf = 1000000001;
const ll INF = 1e18 * 2;
#define MOD 1000000007
#define mod 1000000009
#define pi 3.14159265358979323846
#define Sp(p) cout << setprecision(15) << fixed << p << endl;
int dx[4] = {1, 0, -1, 0}, dy[4] = {0, 1, 0, -1};
int dx2[8] = {1, 1, 0, -1, -1, -1, 0, 1}, dy2[8] = {0, 1, 1, 1, 0, -1, -1, -1};

int main() {
  string s;
  cin >> s;
  int i, j, x, y;
  cin >> x >> y;
  vi tate, yoko;
  int dir = 0;
  int cnt = 0;
  for (i = 0; i < s.size(); i++) {
    if (s[i] == 'F') {
      cnt++;
    } else {
      if (dir == 0) {
        yoko.push_back(cnt);
      } else {
        tate.push_back(cnt);
      }
      cnt = 0;
      dir = 1 - dir;
    }
  }
  if (dir == 0) {
    yoko.push_back(cnt);
  } else {
    tate.push_back(cnt);
  }
  x -= yoko[0];
  yoko.erase(yoko.begin());
  /*
  DEBUG_VEC(yoko);
  DEBUG_VEC(tate);
  DEBUG(x);
  DEBUG(y);
  */
  vector<vector<bool>> dpyoko(yoko.size() + 1, vector<bool>(16100, false)),
      dptate(tate.size() + 1, vector<bool>(16100, false));
  dpyoko[0][8050] = dptate[0][8050] = true;
  for (i = 0; i < yoko.size(); i++) {
    for (j = 0; j < 16100; j++) {
      if (dpyoko[i][j]) {
        dpyoko[i + 1][j + yoko[i]] = true;
        dpyoko[i + 1][j - yoko[i]] = true;
      }
    }
  }
  for (i = 0; i < tate.size(); i++) {
    for (j = 0; j < 16100; j++) {
      if (dptate[i][j]) {
        dptate[i + 1][j + tate[i]] = true;
        dptate[i + 1][j - tate[i]] = true;
      }
    }
  }
  if (dpyoko[yoko.size()][x + 8050] && dptate[tate.size()][y + 8050]) {
    cout << "Yes" << endl;
  } else {
    cout << "No" << endl;
  }
}

Fixed submission:
#include "bits/stdc++.h"
using namespace std;

#define DEBUG(x) cout << #x << ": " << x << endl;
#define DEBUG_VEC(v)                                                           \
  cout << #v << ":";                                                           \
  for (int i = 0; i < v.size(); i++)                                           \
    cout << " " << v[i];                                                       \
  cout << endl

typedef long long ll;
#define vi vector<int>
#define vl vector<ll>
#define vii vector<vector<int>>
#define vll vector<vector<ll>>
#define vs vector<string>
#define pii pair<int, int>
#define pis pair<int, string>
#define psi pair<string, int>
#define pll pair<ll, ll>
const int inf = 1000000001;
const ll INF = 1e18 * 2;
#define MOD 1000000007
#define mod 1000000009
#define pi 3.14159265358979323846
#define Sp(p) cout << setprecision(15) << fixed << p << endl;
int dx[4] = {1, 0, -1, 0}, dy[4] = {0, 1, 0, -1};
int dx2[8] = {1, 1, 0, -1, -1, -1, 0, 1}, dy2[8] = {0, 1, 1, 1, 0, -1, -1, -1};

int main() {
  string s;
  cin >> s;
  int i, j, x, y;
  cin >> x >> y;
  vi tate, yoko;
  int dir = 0;
  int cnt = 0;
  for (i = 0; i < s.size(); i++) {
    if (s[i] == 'F') {
      cnt++;
    } else {
      if (dir == 0) {
        yoko.push_back(cnt);
      } else {
        tate.push_back(cnt);
      }
      cnt = 0;
      dir = 1 - dir;
    }
  }
  if (dir == 0) {
    yoko.push_back(cnt);
  } else {
    tate.push_back(cnt);
  }
  x -= yoko[0];
  if (x < -8050) {
    cout << "No" << endl;
    return 0;
  }
  yoko.erase(yoko.begin());
  /*
  DEBUG_VEC(yoko);
  DEBUG_VEC(tate);
  DEBUG(x);
  DEBUG(y);
  */
  vector<vector<bool>> dpyoko(yoko.size() + 1, vector<bool>(16100, false)),
      dptate(tate.size() + 1, vector<bool>(16100, false));
  dpyoko[0][8050] = dptate[0][8050] = true;
  for (i = 0; i < yoko.size(); i++) {
    for (j = 0; j < 16100; j++) {
      if (dpyoko[i][j]) {
        dpyoko[i + 1][j + yoko[i]] = true;
        dpyoko[i + 1][j - yoko[i]] = true;
      }
    }
  }
  for (i = 0; i < tate.size(); i++) {
    for (j = 0; j < 16100; j++) {
      if (dptate[i][j]) {
        dptate[i + 1][j + tate[i]] = true;
        dptate[i + 1][j - tate[i]] = true;
      }
    }
  }
  if (dpyoko[yoko.size()][x + 8050] && dptate[tate.size()][y + 8050]) {
    cout << "Yes" << endl;
  } else {
    cout << "No" << endl;
  }
}