Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
TLE~~~牛人帮忙看看我用的是memorized search,老是超时,问问牛人DP怎么过的? #include <stdio.h> #include <algorithm> #include <memory.h> #include <string.h> #include <vector> using namespace std; const int MAX_N = 12; typedef struct state { int stones[MAX_N]; int count; }State; vector<State> cachedState; vector<bool> cachedResult; bool Failure (State s) { int i = 0; for (i = 0; i < s.count; ++i) { if (s.stones[i] >= 2) { return false; } } return true; } bool SameState (State& s1, State s2) { int hash[101] = {0}; int i = 0; for (i = 0; i < s1.count; ++i) { hash[s1.stones[i]]++; } for (i = 0; i < s2.count; ++i) { hash[s2.stones[i]]--; } for (i = 0; i < s1.count; ++i) { if (hash[i] != 0) { return false; } } return true; } bool Solve (State s) { if (Failure(s)) { cachedState.push_back(s); cachedResult.push_back(false); return false; } int i = 0; int j = 0; int k = 0; int t = 0; for (i = 0; i < cachedState.size(); ++i) { if (SameState(s, cachedState[i])) { return cachedResult[i]; } } for (i = 0; i < s.count; ++i) { if (s.stones[i] >= 2) { for (k = 1; k <= s.stones[i] - 1; ++k) { State s2 = s; s2.stones[i] = s.stones[i] - k; for (j = 0; j < s.count; ++j) { if (i != j) { for (t = 1; t <= s2.stones[i]; ++t) { State s3 = s2; s3.stones[i] -= t; s3.stones[j] += t; if (!Solve (s3)) { //cached[s] = true; cachedState.push_back(s); cachedResult.push_back(true); return true; } } } } } } } //cached[s] = false; cachedState.push_back(s); cachedResult.push_back(false); return false; } int main() { //freopen ("D:/VC Project/Test/Test/Data.txt", "r", stdin); //Solve (); int t = 0; scanf ("%d", &t); while (t!= 0) { State s; s.count = t; for (int j = 0; j < s.count; ++j) { scanf ("%d", &s.stones[j]); } if (Solve(s)) { printf ("1"); } else { printf("0"); } printf ("\n"); scanf ("%d", &t); } return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator