diff --git "a/Week13-TSP\346\227\205\350\241\214\345\225\206&\345\214\272\351\227\264DP/Uva1261_String Popping.cpp" "b/Week13-TSP\346\227\205\350\241\214\345\225\206&\345\214\272\351\227\264DP/Uva1261_String Popping.cpp" new file mode 100644 index 0000000..b7958bf --- /dev/null +++ "b/Week13-TSP\346\227\205\350\241\214\345\225\206&\345\214\272\351\227\264DP/Uva1261_String Popping.cpp" @@ -0,0 +1,42 @@ +#include +using namespace std; + +map mm; + +int dfs(string& s) { + if(s == "") + return 1; + if(s.length() == 1) + return 0; + auto it = mm.find(s); + if(it != mm.end()) + return it->second; + string sub; + int i, j; + int& res = mm[s]; + for(i = 0; i < s.length(); ++i) { + for(j = i; j < s.length(); ++j) { + if(s[i] != s[j]) + break; + } + if(j >= i + 2) { + sub = s.substr(0, i) + s.substr(j); + res |= dfs(sub); + if(res) + return res; + i = j - 1; + } + } + return res; +} + +int main() { + int n; + cin >> n; + string s; + while(n--) { + cin >> s; + cout << dfs(s) << endl; + } + return 0; +}