Chirurgia cranio-cerebrală minim invazivă
Tehnicile minim invazive impun utilizarea unei tehnologii ultramoderne. Endoscoapele operatorii de diverse tipuri, microscopul operator dedicat, neuronavigația, neuroelectrofiziologia, tehnicile avansate de anestezie, chirurgia cu pacientul treaz reprezintă armamentarium fără de care neurochirurgia prin "gaura cheii" nu ar fi posibilă. Folosind tehnicile de mai sus, tratăm un spectru larg de patologii cranio-cerebrale. www.neurohope.ro |
[TEMA] Problema de backtracking - Virgule
Last Updated: Jul 26 2016 16:46, Started by
razvanw0w
, Jul 26 2016 16:46
·
0
#1
Posted 26 July 2016 - 16:46
Salutare! De ieri ma confrunt cu o problema de backtracking, si anume problema http://www.pbinfo.ro...robleme&id=1502
Am observat ca rezolv cerinta problemei, dar ratez conditiile de optim (in cazul in care exista mai multe posibilitati in care ultimul numar format e minim). Sunt foarte confuz si as vrea sa imi oferiti niste indicatii in rezolvarea problemei. Mai jos este codul meu, va multumesc. #include <bits/stdc++.h> using namespace std; ifstream fin("virgule.in"); ofstream fout("virgule.out"); const int DEBUG = 0; string initial; long long lastMin = LLONG_MAX; int n; vector<int> ans, finalAns; inline void debug() { if (!DEBUG) return; for (const int& x: ans) fout << x << ' '; fout << '\n'; } inline bool testAns() { long long curr = 0, prv = 0; int pos = 0, m = ans.size(); for (int i = 0; i < n; ++i) { curr = curr * 10 + (initial[i] - '0'); if (curr < 0) return 0; if (pos < m && ans[pos] == i) { if (curr <= prv) return 0; prv = curr; curr = 0; ++pos; } } if (curr <= lastMin) { lastMin = curr; return 1; } return 0; } void back(int pos, long long last) { if (last <= lastMin && pos >= n && testAns()) { debug(); finalAns = ans; return; } long long curr = 0; for (int i = pos; i < n; ++i) { curr = curr * 10 + (initial[i] - '0'); if (curr < 0) return; if (curr > last) { if (i != n - 1) ans.push_back(i); back(i + 1, curr); if (ans.size()) ans.pop_back(); } } } int main() { fin >> initial; n = initial.size(); back(0, 0LL); int pos = 0, m = finalAns.size(); for (int i = 0; i < n; ++i) { fout << initial[i]; if (pos < m && finalAns[pos] == i) ++pos, fout << ','; } return 0; } |
Anunturi
▶ 0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users