class Solution {
public:
  /*
  * @param obstacleGrid: A list of lists of integers
  * @return: An integer
  */
  int uniquePathsWithObstacles(vector<vector<int>> &obstacleGrid) {
    // write your code here
  int dp[1000][1000];
  int r=obstacleGrid.size();
  int c=obstacleGrid[0].size();
  for(int i=0;i<r;++i){
    if(0==obstacleGrid[i][0])
      dp[i][0]=1;
    else
      break;
  }
  for(int i=0;i<c;++i){
    if(0==obstacleGrid[0][i])
    dp[0][i]=1;
  else
    break;
  }
  for(int i=1;i<r;++i)
    for(int j=1;j<c;++j){
      if(0==obstacleGrid[i][j])
        dp[i][j]=dp[i-1][j]+dp[i][j-1];
      else
        dp[i][j]=0;
    }
  return dp[r-1][c-1];
  }
};