Skip to content

Instantly share code, notes, and snippets.

@shnya
Created January 19, 2012 12:57
Show Gist options
  • Save shnya/1639951 to your computer and use it in GitHub Desktop.
Save shnya/1639951 to your computer and use it in GitHub Desktop.
SRM 156 SmartElevator
class SmartElevator {
vector<int> arrive,start,dest;
int rec(int pos, int t, vector<bool> &startVisited, vector<bool> &destVisited){
if(count(destVisited.begin(),destVisited.end(),true) == (int)dest.size()){
return t;
}
int minn = 1E+8;
for(size_t i = 0; i < start.size(); i++){
if(startVisited[i]) continue;
startVisited[i] = true;
int tt = t + abs(start[i] - pos);
tt += max(0,arrive[i] - tt);
minn = min(minn,rec(start[i], tt, startVisited, destVisited));
startVisited[i] = false;
}
for(size_t i = 0; i < dest.size(); i++){
if(!startVisited[i] || destVisited[i]) continue;
destVisited[i] = true;
int tt = t + abs(dest[i] - pos);
minn = min(minn,rec(dest[i], tt, startVisited, destVisited));
destVisited[i] = false;
}
return minn;
}
public:
int timeWaiting( vector <int> arrivalTime, vector <int> startingFloor, vector <int> destinationFloor ) {
arrive = arrivalTime;
start = startingFloor;
dest = destinationFloor;
vector<bool> startVis(start.size()),destVis(dest.size());
return rec(1,0,startVis,destVis);
}
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment