int minPathSum(vector<vector<int>>& grid) { int m = grid.size(); int n = grid[0].size(); vector<int> minS(m*n); minS[0]=grid[0][0]; for(int i=1; i<n; i++) minS[i] = minS[i-1]+grid[0][i]; for(int j=1; j<m; j++) minS[j*n] = minS[(j-1)*n] + grid[j][0]; for(int i=1; i<m; i++) for(int j=1; j<n; j++){ minS[i*n+j] = std::min(minS[i*n+j-1],minS[(i-1)*n +j]) +grid[i][j]; } return minS[m*n-1]; }
Rect InputProcessing::getRightEyePosition(Mat frame, Rect facePosition) { Size minS((int)(facePosition.width*.15), (int)(facePosition.height*.15)); Size maxS((int)(facePosition.width*.4), (int)(facePosition.height*.4)); vector<Rect> eyes(1); facePosition.width /= 2; facePosition.height /= 2; facePosition.y += facePosition.height / 3; Mat face(frame, facePosition); eyeCascade.detectMultiScale(face, eyes, 1.05, 3, CV_HAAR_FIND_BIGGEST_OBJECT,minS,maxS); if (eyes.size() == 0) { return Rect(0,0,0,0); } eyes.at(0).x += facePosition.x; eyes.at(0).y += facePosition.y; //from empirical observations, cascades tend to crop right parts for both eyes, so we add width eyes.at(0).width += (int) ceil(eyes.at(0).width *.125); return eyes.at(0); }
bool ListBox::on_key (wchar_t key) { Scroll::Info scroll_info = scroll_.get_info(); switch (key) { case UP: case 'k': if (!select_any) { if (items.empty ()) { return false; } set_select (scroll_info.focus); return true; } else { if (items.size () == 0) { return false; } if (scroll_info.focus == 0) { return false; } set_select (scroll_info.focus - 1); return true; } case DOWN: case 'j': if (!select_any) { if (items.empty ()) { return false; } set_select (scroll_info.focus); return true; } else { if (items.size () == 0) { return false; } if (scroll_info.focus + 1 >= items.size ()) { return false; } set_select (scroll_info.focus + 1); return true; } case PAGEUP: if (items.size () == 0) { return false; } if (scroll_info.focus == 0) { return false; } set_select (maxS (0, scroll_info.focus - get_size().y + 1)); return true; case PAGEDOWN: if (items.size () == 0) { return false; } if (scroll_info.focus + 1 >= items.size ()) { return false; } set_select (minS (scroll_info.focus + get_size().y - 1, items.size () - 1)); return true; case HOME: case L'g': case L'0': case L'^': if (items.size () == 0) { return false; } set_select (0); return true; case END: case L'G': case L'$': if (items.size () == 0) { return false; } set_select (items.size () - 1); return true; case L' ': if (select_any) { return false; } else { set_select (scroll_info.focus); return true; } default: return false; } assert (false); }